我想通过将自定义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]
为什么不使用我的自定义类?
答案 0 :(得分:1)
当您提供目录时,它必须是一个基本目录,所有包都是子目录,就像使用classpath一样。例如如果JVM正在寻找java./lang.Throwable,它将在你给出的目录下查找java/lang/Throwable.class
。
尝试改为
-Xbootclasspath/p:/home/skappler/Programming/**/target/classes/
BTW http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html州
不要部署使用此选项的应用程序覆盖rt.jar中的类,因为这违反了Java Runtime Environment二进制代码许可证。
另一种方法是提供一个代理Throwable类的代理。例如用你自己的替换它。
另一种选择是添加一个lib/endorsed
目录,其中包含您想要的类的jar。
这些选项是否也违反了许可协议,我不能说。