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")
解决方案
Finally i get the solution from a friend :
// 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)