我正在创建自己的一个系统Java软件包的实现,但是在尝试使用软件包时,错误的类会遇到一些问题。
例如,假设我的包是: a.b.c.DoStuff ,并且现有的Java包具有完全相同的名称, a.b.c.DoStuff 。
在测试应用程序中使用以下代码,我可以告诉系统类仍在使用(位于/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar)而不是我的自己的:
ClassLoader loader = test.class.getClassLoader();
System.out.println(loader.getResource("a.b.c.DoStuff.class");
我的包已编译成jar文件( package.jar ),我有:
我必须要忽略一些东西吗?有关如何获取我的包而不是系统包的任何想法?
谢谢,
克里斯
答案 0 :(得分:2)
除非将jar放在特殊的“endorsed”目录中,否则不能替换标准包中的类。有些你根本无法取代。
答案 1 :(得分:1)
谢谢,关于bootclasspath的提示bmargulies!
将我的.jar文件添加到bootclasspath解决了我的问题。总而言之,我可以通过将我的包的.jar添加到bootclasspath来使用我自己的Java包实现:
java -Xbootclasspath/p:<path-to-jar>