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.

有帮助吗?

解决方案

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();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top