Bagaimana cara membandingkan dua file .jar? Keduanya telah mengkompilasi file .class.
Saya ingin perbedaan dalam hal perubahan metode, dll.
java
jar
comparison
diff
Kunal
sumber
sumber
Jika Anda memilih dua file di IntellijIdea dan menekannya,
Ctrl + D
maka Anda akan melihat perbedaannya. Saya menggunakan Ultimate dan tidak tahu apakah itu akan berfungsi dengan edisi Komunitas .sumber
sumber
jar
untuk mengekstrak konten, alih-alih mengganti nama file dan menggunakanpkunzip
.)javap -c
menyimpannya ke bytecode (terutama jika dengan "perubahan metode", OP berarti perubahan pada tanda tangan metode).diff
ing darijavap
ataujad
keluaran dari mendera.Saya gunakan untuk ZipDiff lib (memiliki Java dan ant API).
sumber
Ekstrak setiap jar ke direktorinya sendiri menggunakan perintah jar dengan parameter xvf. yaitu
jar xvf myjar.jar
untuk setiap toples.Kemudian, gunakan perintah UNIX
diff
untuk membandingkan dua direktori. Ini akan menunjukkan perbedaan direktori. Anda dapat menggunakandiff -r dir1 dir2
dua pengulangan dan menunjukkan perbedaan file teks di setiap direktori (.xml, .properties, dll).Ini juga akan menunjukkan jika file kelas biner berbeda. Untuk benar-benar membandingkan file kelas Anda harus mendekompilasi mereka seperti yang dicatat oleh orang lain.
sumber
Berikut ini skrip saya untuk melakukan proses yang dijelaskan oleh sje397:
Saya dapat menjalankannya di Windows menggunakan GIT untuk Windows. Buka saja prompt perintah. Jalankan bash dan kemudian jalankan skrip dari sana.
sumber
diff -r ${EXT_DIR1} ${EXT_DIR2}
atau${DIFF} ${EXT_DIR1} ${EXT_DIR2}
(jika menggunakan kembali variabel yang Anda deklarasikan). Bagi mereka yang menggunakan cygwin, skripnya hampir berfungsi untuk saya kecuali dua hal yang telah saya ubah: 1) Saya harus menggunakan javap bawaan daripada jad, karena saya tidak dapat mengunduh jad (enterp. Firewall ... ); 2) sebagaijar xf
does't memahami jalur seperti/cygwin/c/rest/of/path
yang dikembalikan olehpwd
di cygwin, saya harus mengubahnya menjadic:/rest/of/path
:JAR_DIR=${PWD}
,JAR_DIR=${JAR_DIR#*/cygdrive/c}
,JAR_DIR="c:$JAR_DIR"
jad
? Tidak memiliki biner yang tersedia di PATHfoo/bar/toto.jar
), Anda perlu menambahkan-p
argumen ke perintah mkdirDi Linux / CygWin, skrip praktis yang terkadang saya gunakan adalah:
sumber
Gunakan Java Decompiler untuk mengubah file jar menjadi file kode sumber, dan kemudian gunakan WinMerge untuk melakukan perbandingan.
Anda harus berkonsultasi dengan pemegang hak cipta dari kode sumber, untuk mengetahui apakah boleh dilakukan.
sumber
gunakan java decompiler dan dekompilasi semua file .class dan simpan semua file sebagai struktur proyek.
lalu gunakan meld diff viewer dan bandingkan sebagai folder ..
sumber
Ini alat yang benar-benar gratis http://www.extradata.com/products/jarc/
sumber
Silakan coba http://www.osjava.org/jardiff/ - alat sudah tua dan daftar ketergantungannya besar. Dari dokumen, sepertinya patut dicoba.
sumber