質問

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