I have an application used in clustering to keep it available if one or more failed and I want to implement a way to check the version of the jar file in java.
I have this piece of code to do that (e.g.: in the class 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");
When i run the jar as an application it works fine BUT when i use the jar file as a librairie in an other application, i get the version number of the other application.
So my question is, how can i get the manifest of the jar where MyClass is contained ?
NB : I'm not interested in solution using static constraint like 'classLoader.getRessource("MyJar.jar")' or File("MyJar.jar")
The correct way to obtain the Implementation Version is with the Package.getImplementationVersion() method:
String version = MyClass.class.getPackage().getImplementationVersion();
You can code like :
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"
See this tutorial, thank you. I also learn new thing from here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With