【发布时间】:2016-12-30 21:35:00
【问题描述】:
我有一个包含以下内容的 jar 文件:
LibJar Contents
dir1
|dir1-1
| |Class1-1-1
| |LClass1-1-2
|Ldir1-2
|LClass1-2-1
Ldir2
|LClass2-1
我的 java 程序(我们可以称它为 ProgJar,但我也在 Netbeans IDE 中运行它)具有以下包结构:
ProgJar
dir1
|dir1-1
| |Class-1-1
| |PClass1-1-2 Different file name from LibJar
Pdir2
|PClass2-1
ProgJar 和 LibJar 之间唯一共享的包结构是“dir1/dir1-1/Class1-1-1”。以 P 为前缀的其他所有内容对于 ProgJar 都是唯一的,而以 L 为前缀的所有内容对于 LibJar 都是唯一的。
我在 ProgJar 中使用 LibJar 作为库。
这是我在 ProjJar 中运行的代码的 sn-p:
ClassLoader clP = Pdir2.PClass2-1.class.getClassLoader();
ClassLoader clL = Ldir2.LClass2-1.class.getClassLoader();
URL u1 = clP.getResource("dir1/dir1-1");
URL u2 = clL.getResource("dir1/dir1-1");
System.out.printf(u1.toExternalForm());
System.out.printf(u2.toExternalForm());
当我在 Netbeans 中运行它时,我得到以下输出:
Netbeans Output:
jar:file:/C:/path/to/project/lib/LibJar.jar!/dir1/dir1-1
jar:file:/C:/path/to/project/lib/LibJar.jar!/dir1/dir1-1
当我以 ProgJar 作为 netbeans 之外的内置 jar 运行时,我得到:
Jar Output:
jar:file:/C:/path/to/ProgJar/ProgJar.jar!/dir1/dir1-1
jar:file:/C:/path/to/ProgJar/ProgJar.jar!/dir1/dir1-1
我希望看到的是以下内容:
Netbeans Output:
jar:file:/C:/path/to/project/build/classes/dir1/dir1-1
jar:file:/C:/path/to/project/lib/LibJar.jar!/dir1/dir1-1
Jar Output:
jar:file:/C:/path/to/ProgJar/ProgJar.jar!/dir1/dir1-1
jar:file:/C:/path/to/ProgJar/libs/LibJar.jar!/dir1/dir1-1
我阅读了几篇不同的文章,但这篇文章似乎与这个特定问题有些相关:
http://jeewanthad.blogspot.com/2014/02/how-to-solve-java-classpath-hell-with.html
我怎样才能达到我指定的输出?
【问题讨论】:
标签: java netbeans classpath classloader