Bagaimana Anda menemukan nama kelas tertentu di dalam banyak file jar?
(Mencari nama kelas yang sebenarnya, bukan kelas yang merujuknya.)
Bagaimana Anda menemukan nama kelas tertentu di dalam banyak file jar?
(Mencari nama kelas yang sebenarnya, bukan kelas yang merujuknya.)
Jawaban:
Eclipse dapat melakukannya, cukup buat proyek (sementara) dan letakkan perpustakaan Anda di classpath proyek. Maka Anda dapat dengan mudah menemukan kelas.
Alat lain, yang muncul di benak saya, adalah Java Decompiler. Ini dapat membuka banyak stoples sekaligus dan membantu untuk menemukan kelas juga.
sumber
Unix
Di Linux, varian Unix lainnya, Git Bash di Windows, atau Cygwin, gunakan
jar
(atauunzip -v
)grep
,, danfind
perintah.Berikut ini daftar semua file kelas yang cocok dengan nama yang diberikan:
Jika Anda tahu seluruh daftar arsip Java yang ingin Anda cari, Anda bisa menempatkan semuanya di direktori yang sama menggunakan tautan (simbolis).
Atau gunakan
find
(case sensitif) untuk menemukan file JAR yang berisi nama kelas yang diberikan:Misalnya, untuk menemukan nama arsip yang mengandung
IdentityHashingStrategy
:Jika JAR bisa berada di mana saja dalam sistem dan
locate
perintah tersedia:Variasi sintaks:
Windows
Buka prompt perintah , ubah ke direktori (atau direktori leluhur) yang berisi file JAR, lalu:
Begini cara kerjanya:
for /R %G in (*.jar) do
- loop di atas semua file JAR, direktori traversing rekursif; simpan nama file di%G
.@jar -tvf "%G" |
- Jalankan perintah Java Archive untuk mendaftar semua nama file dalam arsip yang diberikan, dan tulis hasilnya ke output standar; yang@
Menekan simbol mencetak doa perintah ini.find "ClassName" > NUL
- cari input standar, disalurkan dari output perintah jar, untuk nama kelas yang diberikan; ini akanERRORLEVEL
menjadi 1 jika ada kecocokan (jika tidak 0).&& echo %G
- iffERRORLEVEL
bukan nol, tulis nama file arsip Java ke output standar (konsol).Web
Gunakan mesin pencari yang memindai file JAR .
sumber
beberapa waktu lalu, saya menulis sebuah program hanya untuk itu: https://github.com/javalite/jar-explorer
sumber
memberi Anda nama toples
memberi Anda paket kelas
sumber
sumber
jar -tvf
denganunzip -l
.Untuk menemukan stoples yang cocok dengan string yang diberikan:
find . -name \*.jar -exec grep -l YOUR_CLASSNAME {} \;
sumber
Saya tidak tahu utilitas untuk melakukannya ketika saya menemukan masalah ini, jadi saya menulis yang berikut:
sumber
Ada juga dua utilitas berbeda yang disebut "JarScan" yang melakukan persis apa yang Anda minta: JarScan (inetfeedback.com) dan JarScan (java.net)
sumber
skrip user1207523 berfungsi dengan baik untuk saya. Berikut ini adalah varian yang mencari file jar secara rekursif menggunakan find alih-alih ekspansi sederhana;
sumber
Saya selalu menggunakan ini pada Windows dan ini bekerja dengan sangat baik.
findstr.exe datang standar dengan Windows dan params:
Semoga ini bisa membantu seseorang.
sumber
Sebuah
bash script
solusi menggunakanunzip (zipinfo)
. Diuji padaUbuntu 12
.sumber
Untuk mencari semua file jar di direktori tertentu untuk kelas tertentu, Anda bisa melakukan ini:
atau, bahkan lebih sederhana,
Output terlihat seperti ini:
Ini sangat cepat karena opsi -F berarti mencari string tetap, sehingga tidak memuat mesin regex untuk setiap permintaan grep. Jika perlu, Anda selalu dapat menghilangkan opsi -F dan menggunakan regex.
sumber
Saya menemukan cara baru ini
Jadi ini mencantumkan jar dan kelas jika ditemukan, jika mau, Anda dapat memberikan ls -1 * .jar atau input ke xargs dengan perintah find HTH Someone.
sumber
ClassFinder adalah program yang dirancang untuk mengatasi masalah ini. Ini memungkinkan Anda untuk mencari secara rekursif melalui direktori dan file jar untuk menemukan semua instance kelas yang cocok dengan suatu pola. Itu ditulis dalam Java, bukan python. Ini memiliki GUI yang bagus yang membuatnya mudah digunakan. Dan itu berjalan cepat. Rilis ini dikompilasi dalam jar yang bisa dijalankan sehingga Anda tidak harus membuatnya dari sumber.
Unduh di sini: ClassFinder 1.0
sumber
Periksa JBoss Tattletale ; Meskipun saya tidak pernah menggunakannya secara pribadi, ini tampaknya menjadi alat yang Anda butuhkan.
sumber
Cukup gunakan util FindClassInJars, ini adalah program ayunan sederhana, tetapi bermanfaat. Anda dapat memeriksa kode sumber atau mengunduh file jar di http://code.google.com/p/find-class-in-jars/
sumber
Tidak yakin mengapa skrip di sini tidak pernah benar-benar bekerja untuk saya. Ini bekerja:
sumber
Script untuk menemukan file jar: find_jar.sh
Penggunaan: ./find_jar.sh <direktori tingkat atas yang berisi file jar> <Nama kelas untuk ditemukan>
Ini mirip dengan sebagian besar jawaban yang diberikan di sini. Tapi itu hanya menampilkan nama file, jika grep menemukan sesuatu. Jika Anda ingin menekan output grep Anda dapat mengarahkan ulang ke / dev / null tapi saya lebih suka melihat output grep juga sehingga saya dapat menggunakan nama kelas parsial dan mencari tahu yang benar dari daftar output yang ditampilkan.
Nama kelas dapat berupa nama kelas sederhana Seperti "String" atau nama yang sepenuhnya memenuhi syarat seperti "java.lang.String"
sumber
Untuk menambah alat lain ... ini adalah alat yang sangat sederhana dan berguna untuk windows. File exe sederhana yang Anda klik, berikan direktori untuk mencari, nama kelas dan itu akan menemukan file jar yang berisi kelas itu. Ya, ini bersifat rekursif.
http://sourceforge.net/projects/jarfinder/
sumber
Untuk menemukan kelas di folder (dan subfolder) sekelompok JAR: https://jarscan.com/
Contoh:
sumber
Anda dapat menemukan kelas di direktori yang penuh dengan stoples dengan sedikit shell:
Mencari kelas "FooBar":
sumber
Satu hal untuk ditambahkan ke semua di atas: jika Anda tidak memiliki jar yang dapat dieksekusi tersedia (itu datang dengan JDK tetapi tidak dengan JRE), Anda dapat menggunakan unzip (atau WinZip, atau apa pun) untuk mencapai hal yang sama.
sumber
promosi diri yang tidak tahu malu, tetapi Anda dapat mencoba utilitas yang saya tulis: http://sourceforge.net/projects/zfind
Ini mendukung arsip / file terkompresi paling umum (jar, zip, tar, tar.gz dll) dan tidak seperti banyak finder jar / zip lainnya, mendukung file zip bersarang (zip dalam zip, jar dalam jar dll) hingga kedalaman tak terbatas.
sumber
Agak terlambat ke pesta, tapi tetap saja ...
Saya telah menggunakan JarBrowser untuk menemukan di mana jar kelas tertentu hadir. Itu punya GUI mudah digunakan yang memungkinkan Anda untuk menelusuri isi semua guci di jalur yang dipilih.
sumber
Script berikut akan membantu Anda
sumber
Yang ini berfungsi dengan baik di MinGW (lingkungan windows bash) ~ gitbash
Masukkan fungsi ini ke file .bashrc Anda di direktori HOME Anda:
sumber
Grepj adalah utilitas baris perintah untuk mencari kelas dalam file jar. Saya adalah penulis utilitas.
Anda dapat menjalankan utilitas seperti
grepj package.Class my1.jar my2.war my3.ear
Beragam file jar, telinga, perang dapat disediakan. Untuk penggunaan lanjutan, gunakan untuk menyediakan daftar toples yang akan dicari.
sumber
Periksa Plugin ini untuk gerhana yang dapat melakukan pekerjaan yang Anda cari.
https://marketplace.eclipse.org/content/jarchiveexplorer
sumber
Di bawah lingkungan Linux Anda dapat melakukan hal berikut:
Di mana nama adalah nama file kelas yang Anda cari di dalam guci yang didistribusikan di hierarki direktori yang di-root di base_dir .
sumber
Anda dapat menggunakan
locate
dangrep
:Pastikan Anda menjalankan
updatedb
sebelum menggunakanlocate
.sumber