Question

I am running a GUI application (A.jar). Then I add a plugin (B.jar) to this GUI(A.jar). Now I want to access the manifest.mf file in B.jar. I tried B.class.getResourceAsInputStream("/META-INF/MANIFEST.MF"). However, what I got is the manifest.mf in A.jar, not in B.jar.

Anyone can give me some hints on this problem? Thanks so much.

Was it helpful?

Solution

It is the case that the general class loader will take the path the comes first on the class path, and evidently A.jar comes first, before B.jar.

String someUniqueResourceInBJar = "...";
URL url = B.class.getResource(someUniqueResourceInBJar);
url = new URL(url.getPath().replaceFirst(someUniqueResourceInBJar + "$", "")
    + "META-INF/MANIFEST.MF";
url.openStream();

The url will be something like "jar:file://.../B.jar!META-INF/MANIFEST.MF".


Alternatively getting the class URL:

URL url = b.class.getProtectionDomain().getCodeSource().getLocation();
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top