Saat ini saya bekerja di J2ME polish aplikasi, hanya meningkatkan itu. Saya menemukan kesulitan untuk mendapatkan versi yang tepat dari file jar. Apakah ada cara untuk menemukan versi jar file untuk impor yang dilakukan di kelas? Maksud saya jika anda memiliki beberapa hal, impor x.y.z; kita dapat mengetahui versi jar x.y paket termasuk?
Hanya untuk memperluas pada jawaban di atas, dalam META-INF/MANIFEST.MF file dalam BOTOL, anda mungkin akan melihat garis: Manifest-Version: 1.0
← Ini TIDAK jar versi nomor!
Anda perlu mencari Implementasi-Versi
yang, jika ada, adalah properti bebas-teks string sehingga seluruhnya sampai ke JAR's penulis seperti apa yang anda'll menemukan di sana.
Lihat juga Oracle docs dan Versi Paket specificaion
Botol masing-masing versi memiliki checksum. Anda dapat menghitung checksum untuk anda jar (yang tidak memiliki versi dan sekitarnya) dan bandingkan dengan versi yang berbeda dari jar. Kita juga dapat mencari botol menggunakan checksum.
Merujuk Pertanyaan ini untuk menghitung checksum: https://stackoverflow.com/questions/478722/what-is-the-best-way-to-calculate-a-checksum-for-a-file-that-is-on-my-machine
Pada dasarnya anda harus menggunakan jawa.lang.Paket
kelas yang menggunakan classloader untuk memberikan anda informasi tentang kelas anda.
contoh:
String.class.getPackage().getImplementationVersion();
Package.getPackage(this).getImplementationVersion();
Package.getPackage("java.lang.String").getImplementationVersion();
Saya pikir logback dikenal untuk menggunakan fitur ini untuk melacak JAR/nama versi dari masing-masing kelas untuk diproduksi stacktraces.
lihat juga http://docs.oracle.com/javase/8/docs/technotes/guides/versioning/spec/versioning2.html#wp90779
Program sederhana ini akan menampilkan semua kasus untuk versi jar yaitu
Peta<String, String> jarsWithVersionFound = new LinkedHashMap<String, String>();
Daftar
//loop melalui file dalam folder lib //mengambil stoples satu per satu dan getVersion() //cetak di konsol..menyimpan file(?)..mungkin nanti
File[] file = new File("path_to_jar_folder").listFiles();
untuk(File file : file) { String fileName = file.getName();
mencoba { String jarVersion = new Jar(file).getVersion();
jika(jarVersion == null) jarsWithNoVersionFound.tambahkan(fileName); lain jarsWithVersionFound.masukan(nama file, jarVersion);
} catch(Exception ex) { jarsWithNoManifest.tambahkan(fileName); } }
Sistem.keluar.println(" Botol dengan versi yang ditemukan "); untuk(Masuk<String, String> jarName : jarsWithVersionFound.entrySet()) Sistem.keluar.println(jarName.getKey() + " : " + jarName.getValue());
Sistem.keluar.println("\n \n Botol dengan tidak ada versi yang ditemukan "); untuk(String jarName : jarsWithNoVersionFound) Sistem.keluar.println(jarName);
Sistem.keluar.println("\n \n Botol dengan tidak menampakkan ditemukan "); untuk(String jarName : jarsWithNoManifest) Sistem.keluar.println(jarName);
Ia menggunakan javaxt-core jar yang bisa di download dari http://www.javaxt.com/downloads/
I'm-akhir ini, tetapi anda dapat mencoba dua metode berikut
menggunakan ini diperlukan kelas
import java.util.jar.Attributes;
import java.util.jar.Manifest;
Metode ini biar akses jar atribut. Aku suka yang kompatibel dan menggunakan yang terbaru. Jadi saya menggunakan ini
public Attributes detectClassBuildInfoAttributes(Class sourceClass) throws MalformedURLException, IOException {
String className = sourceClass.getSimpleName() + ".class";
String classPath = sourceClass.getResource(className).toString();
if (!classPath.startsWith("jar")) {
// Class not from JAR
return null;
}
String manifestPath = classPath.substring(0, classPath.lastIndexOf("!") + 1) +
"/META-INF/MANIFEST.MF";
Manifest manifest = new Manifest(new URL(manifestPath).openStream());
return manifest.getEntries().get("Build-Info");
}
public String retrieveClassInfoAttribute(Class sourceClass, String attributeName) throws MalformedURLException, IOException {
Attributes version_attr = detectClassBuildInfoAttributes(sourceClass);
String attribute = version_attr.getValue(attributeName);
return attribute;
}
Ini bekerja dengan baik ketika anda menggunakan maven dan perlu pom rincian untuk diketahui kelas. Semoga ini bisa membantu.
Jika anda memiliki winrar, buka dengan winrar jar, double-klik untuk membuka folder META-INF
. Ekstrak TERWUJUD.MF
dan PERUBAHAN
file untuk setiap lokasi (misalnya desktop).
Buka file diekstrak dalam editor teks: Anda akan melihat Implementasi Versi atau versi rilis.
Hal ini dapat diperiksa dengan perintah java -jar jarname