重新实现Java包时的类路径?

时间:2012-06-26 23:13:01

标签: java package

我正在创建自己的一个系统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 ),我有:

  1. 在我的测试文件中导入该类(导入a.b.c.DoStuff;)
  2. 将package.jar添加到我的类路径中(同时使用“export CLASSPATH ...”并使用“java -classpath ...”)
  3. 我必须要忽略一些东西吗?有关如何获取我的包而不是系统包的任何想法?

    谢谢,
    克里斯

2 个答案:

答案 0 :(得分:2)

除非将jar放在特殊的“endorsed”目录中,否则不能替换标准包中的类。有些你根本无法取代。

答案 1 :(得分:1)

谢谢,关于bootclasspath的提示bmargulies!

将我的.jar文件添加到bootclasspath解决了我的问题。总而言之,我可以通过将我的包的.jar添加到bootclasspath来使用我自己的Java包实现:

java -Xbootclasspath/p:<path-to-jar>