我根据自己的需要修改了一些核心java类,例如。在 Java.lang.String 匹配方法中使用正则表达式缓存。
我想使用这些修补过的类,而不是 jre 附带的 rt.jar 中的默认类。
我已将 src.zip 源代码导入到 eclipse 中,其中包含 rt.jar 中类文件的所有源文件,并根据我的需要更改了它们。然后,我从 eclipse JRE 库配置中删除了 rt.jar,并更改了 eclipse 中已安装 JRE 的默认 VM 参数选项,以告诉 VM 使用我自己的自定义核心类>
-Xbootclasspath/p: /media/SSD/workspace/proj/bin/
但是,当运行简单的测试程序时,虚拟机无法启动,并显示以下内容>
"Could not find or load main class .media.SSD.workspace.proj.bin."
我也尝试使用 -Xbootclasspath/a: 来追加,但没有什么区别。
所有核心java类都位于具有正确目录结构的bin文件夹中(由eclipse编译),例如java/util、java/io等。
我不知道为什么它提示主类,因为 JRE 库没有主类,而我自己的项目主要方法位于 bin/core/boot.class 中,该方法由 eclipse 在运行中检测到并设置配置(之前工作正常)。
我正在遵循这个指南,它可能有点过时,并且没有使用 eclipse 来修补核心类>
http://media.techtarget.com/tss/static/articles/content/CovertJava/Sams-CovertJava-15.pdf
有人可以指出我做错了什么吗?
更新/解决方法: 我创建了一个包含所有核心类的新项目,然后将其导出为一个新的 rt.jar 文件,并将其放在 openjdk 的 jre/lib 文件夹中的默认文件位置,它就可以工作了。但这意味着我机器上的所有 java 应用程序都将使用修补后的类,而不仅仅是我的项目,这远非理想,所以我上面的问题仍然存在。
最佳答案
参数中不应有空格
-Xbootclasspath/p:/media/SSD/workspace/proj/bin/
bootclasspath 的参数(在 :
之后)应该是 ;
(在 Windows 上)分隔的文件夹 zip 和 jar 列表。
Java 已将您的参数解释为要添加到 bootclasspath 的空文件夹列表和要运行的类的名称,这就是为什么它提示找不到类 .media.SSD.workspace.proj.bin。
关于java eclipse 修补了 JRE 类 Xbootclasspath 无法找到或加载主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30468535/