我想通过将自定义 JVM Throwable 类添加到 bootclasspath 中,将其替换为我自己的实现。我的论点如下所示: -Xbootclasspath/p:/home/skappler/Programming/**/target/classes/java/lang
lang文件夹包含Throwable.class
当我使用 -verbose:class
启动程序时,我得到:
[Path /home/skappler/Programming/**/target/classes/java/lang]
[Opened /opt/java/jre/lib/rt.jar]
...
[Loaded java.lang.Throwable from /opt/java/jre/lib/rt.jar]
为什么它不使用我的自定义类?
最佳答案
当您给出一个目录时,它必须是一个基目录,所有包都是该目录的子目录,就像类路径一样。例如如果 JVM 正在寻找 java./lang.Throwable,它将在您提供的目录下寻找 java/lang/Throwable.class
。
尝试一下
-Xbootclasspath/p:/home/skappler/Programming/**/target/classes/
顺便说一句http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html州
Do not deploy applications that use this option to override a class in rt.jar because this violates the Java Runtime Environment binary code license.
另一种方法是提供一个代理来检测 Throwable 类。例如将其替换为您自己的。
另一个选择是添加一个 lib/endorsed
目录,其中包含您想要的类的 jar。
我不能说这些选项是否也违反许可协议(protocol)。
关于java - 具有单个类文件的 JVM Xbootclasspath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26100743/