获取JAR文件版本号

时间:2014-06-19 12:23:04

标签: java jar version manifest

我有一个用于群集的应用程序,以便在一个或多个失败时保持可用,并且我想实现一种方法来检查java中jar文件的版本。

我有这段代码(例如:在MyClass类中):

        URLClassLoader cl = (URLClassLoader) (new MyClass ())
            .getClass().getClassLoader();
        URL url = cl.findResource("META-INF/MANIFEST.MF");
        Manifest manifest = new Manifest(url.openStream());
        attributes = manifest.getMainAttributes();
        String version = attributes.getValue("Implementation-Version");

当我将jar作为应用程序运行时它工作正常但是当我在其他应用程序中使用jar文件作为librairie时,我得到了另一个应用程序的版本号。

所以我的问题是,如何获得包含MyClass的jar的清单?

注意:我对使用静态约束的解决方案不感兴趣 'classLoader.getRessource(“MyJar.jar”)'或File(“MyJar.jar”)

4 个答案:

答案 0 :(得分:4)

获取实施版本的正确方法是使用Package.getImplementationVersion() method

String version = MyClass.class.getPackage().getImplementationVersion();

答案 1 :(得分:3)

您可以编写如下代码:

java.io.File file = new java.io.File("/packages/file.jar"); //give path and file name
java.util.jar.JarFile jar = new java.util.jar.JarFile(file);
java.util.jar.Manifest manifest = jar.getManifest();

String versionNumber = "";
java.util.jar.Attributes attributes = manifest.getMainAttributes();
if (attributes!=null){
    java.util.Iterator it = attributes.keySet().iterator();
    while (it.hasNext()){
        java.util.jar.Attributes.Name key = (java.util.jar.Attributes.Name) it.next();
        String keyword = key.toString();
        if (keyword.equals("Implementation-Version") || keyword.equals("Bundle-Version")){
            versionNumber = (String) attributes.get(key);
            break;
        }
    }
}
jar.close();

System.out.println("Version: " + versionNumber); //"here it will print the version"

请参阅this教程,谢谢。我也从这里学到新东西。

答案 2 :(得分:0)

答案 3 :(得分:0)

最后我从朋友那里得到了解决方案:

    // Get jarfile url
    String jarUrl = JarVersion.class
        .getProtectionDomain().getCodeSource()
        .getLocation().getFile();

    JarFile jar = new JarFile(new File(jarUrl));
    Manifest manifest = jar.getManifest();
    Attributes attributes = manifest.getMainAttributes();

    String version = attributes.getValue(IMPLEMENTATION_VERSION)