1

我正在努力创建自己的系统 Java 包之一的实现,但是在尝试使用该包时遇到了一些问题,即错误的类被拾取。

例如,假设我的包是:abcDoStuff并且现有的 Java 包具有完全相同的名称abcDoStuff

在测试应用程序中使用以下代码,我可以看出系统类仍在使用(位于 /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. 在我的测试文件中导入了类(import abcDoStuff;)
  2. 将 package.jar 添加到我的类路径中(同时使用“export CLASSPATH ...”和使用“java -classpath ...”)

一定有什么我忽略了?关于如何取走我的包裹而不是系统包裹的任何想法?

谢谢,
克里斯

4

2 回答 2

2

除非您将 jar 放在特殊的“认可”目录中,否则您无法替换标准包中的类。还有一些你根本无法更换。

于 2012-06-26T23:14:42.300 回答
1

谢谢,bmargulies 关于引导类路径的提示!

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

java -Xbootclasspath/p:<path-to-jar>
于 2012-06-27T03:36:46.543 回答