Apakah ada di antara Anda yang mengetahui alat yang akan mencari file .class dan kemudian menampilkan versi kompilasi mereka?
Saya tahu Anda dapat melihatnya satu per satu di editor hex tetapi saya memiliki banyak file kelas untuk dilihat (sesuatu di aplikasi raksasa saya sedang mengkompilasi ke Java6 untuk beberapa alasan).
jvm-bytecode
SCdF
sumber
sumber
Jawaban:
Gunakan alat javap yang disertakan dengan JDK. The
-verbose
pilihan akan mencetak nomor versi file kelas.Untuk hanya menampilkan versinya:
sumber
Cukup mudah untuk membaca tanda tangan file kelas dan mendapatkan nilai ini tanpa API pihak ketiga. Yang perlu Anda lakukan hanyalah membaca 8 byte pertama.
Untuk file kelas versi 51.0 (Java 7), byte pembukanya adalah:
... di mana 0xCAFEBABE adalah byte ajaib, 0x0000 adalah versi minor dan 0x0033 adalah versi mayor.
Berjalan direktori ( File ) dan arsip ( JarFile ) mencari file kelas itu sepele.
Blog Oracle Joe Darcy mencantumkan versi kelas untuk pemetaan versi JDK hingga Java 7:
sumber
Pada Unix-like
Akan memberikan tipe file dan versinya juga. Seperti inilah hasilnya:
sumber
Jika Anda menggunakan sistem unix, Anda bisa melakukan
(Versi file saya mengatakan "data kelas Java yang dikompilasi, versi 50.0" untuk kelas java6).
sumber
file *.class
menghasilkan:ClassName.class: compiled Java class data, version 50.0 (Java 1.6)
Namun pemeriksaan versi java lainnya
sumber
Dalam gerhana jika Anda tidak memiliki sumber terlampir. Perhatikan baris pertama setelah tombol lampirkan sumber.
// Dikompilasi dari CDestinoLog.java ( versi 1.5: 49.0, super bit )
sumber
Mungkin ini membantu seseorang juga. Sepertinya ada cara yang lebih mudah untuk mendapatkan versi JAVA yang digunakan untuk kompilasi / build .class. Cara ini berguna untuk pemeriksaan mandiri aplikasi / kelas pada versi JAVA.
Saya telah melalui perpustakaan JDK dan menemukan konstanta yang berguna ini: com.sun.deploy.config.BuiltInProperties.CURRENT_VERSION . Entah sejak kapan sudah di JAVA JDK.
Mencoba potongan kode ini untuk beberapa konstanta versi, saya mendapatkan hasil di bawah ini:
src:
keluaran:
Dalam bytecode kelas ada konstanta yang benar-benar tersimpan - lihat bagian bertanda merah dari Main.call - konstanta yang disimpan dalam bytecode .class
Konstanta ada di kelas yang digunakan untuk memeriksa apakah versi JAVA sudah kedaluwarsa (lihat Cara memeriksa Java yang sudah kedaluwarsa ) ...
sumber
Solusi berbasis java menggunakan nomor ajaib versi . Di bawah ini digunakan oleh program itu sendiri untuk mendeteksi versi bytecode-nya.
sumber
Kelas Java ini memindai konten dari semua konten WAR dan JAR yang ditemukan di bawah daftar direktori, dan mencetak ringkasan versi file kelas java untuk setiap komponen termasuk setiap JAR dalam WARs:
sumber