【发布时间】:2012-08-20 14:41:19
【问题描述】:
我想向rt.jar 添加一些类文件。我怎么能做到这一点?
【问题讨论】:
-
不!!!!不要这样做!!!!!!
-
它只是一个jar文件,所以你可以使用
jar工具的u选项来更新它。但是,您永远不应该这样做。认为你应该这样做是一个强烈的信号,表明你不了解这个平台。
我想向rt.jar 添加一些类文件。我怎么能做到这一点?
【问题讨论】:
jar工具的u选项来更新它。但是,您永远不应该这样做。认为你应该这样做是一个强烈的信号,表明你不了解这个平台。
你的问题说明你对java平台有一些误解。
首先你需要知道 rt.jar 是什么以及它的作用:
rt.jar 是包含 java 运行时所需的所有类的 jar。因此它的名字是 rt.jar
既然你知道了,你需要知道你的 java 程序是如何运行的:
你的 java 程序,你所有的 jars 和 classes 都由 java 虚拟机执行。
如您所见,您编写的代码和 java 运行时使用的 rt.jar 是完全独立的,应该保持如此。
如果您需要一些功能,您应该将其添加到您的 jar 中。
【讨论】:
不要更新它。为什么要更新它?
无论如何,如果你想更新它,我知道一种方法,你可以在 winrar 中打开 jar 文件并将更新的 .class 文件粘贴到存档中。但是您的 jar 可能会处于不一致的状态。风险自负。
【讨论】:
你可以使用这个命令:
jar uf jar-file input-file(s)
详情请参考链接:
【讨论】:
更新rt.jar 的最佳方法是安装更新的Java 版本。 ;)
如果您想在新包中添加自己的类,可以将它们添加到类路径中的 jar 中。这比更改现有类更可取。
如果唯一的选择是更改现有类,您可以在 jar 中创建一个“补丁”,将其添加到引导类路径之前,或者您可以将 jar 添加到 lib/endorsed 目录。我不会为生产代码执行此操作,仅用于您自己的测试。
【讨论】:
我已经尝试了带有 u 和 0(即零)选项的 jar.exe,它最接近原始 rt.jar 文件,但如果我更新了 JDK 的 JRE 的 rt.jar,我遇到了问题更新后编译和震动。不知道为什么!只需使用 JRE 运行程序似乎就可以了。
我也尝试过 -Xbootclasspath/p 但无法正常工作。
查看Replace a class within the Java class library with a custom version,我发现将更改的 rt.jar 分发给您的客户存在法律问题,即使您可以弄清楚如何正确执行。因此,我计划在该页面中接受建议并创建一个 java 代理。这显然是合法且有效的。
人们可能想要修改 rt.jar 的一个原因是在使用 -g 选项编译 JDK 附带的源代码后添加调试信息。人们可能还想修补一些东西。这些当然是供自己使用的。
【讨论】: