【问题标题】:Building OpenJDK Library from source?从源代码构建 OpenJDK 库?
【发布时间】:2018-08-13 02:57:04
【问题描述】:

我想尝试更改 java.lang 中的 java 库,并可能最终尝试其他包。这意味着我希望能够分离出至少 java.lang 并编译为它们,而不是使用 rt.jar

如果使用 rt.jar,则无法编辑 java.lang 中类的源代码,因为它们已在 rt.jar 中找到。

我在 mercurial 中找到了 repo:http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/tip/src/share/classes/

但没有关于如何构建的说明。

我刚刚通过安装 jdk9 构建 jdk,然后使用 mercurial:

hg 克隆http://hg.openjdk.java.net/jdk/jdk/

我可以成功构建 java 可执行文件和所有实用程序,但 rt.jar 不在此包中。

【问题讨论】:

  • 有趣。该文件建议加载已锁定的 jdk6。我试图了解如何获得 Oracle 的支持。你认为自述文件可能是正确的吗?奇怪的是这是多么令人困惑。 “我们需要将您的用户帐户连接到支持标识符。访问和权限由您组织中的管理员批准。您需要添加至少一个支持标识符才能继续。”
  • 从 Java 6 开始的任何 Java 都应该可以工作。
  • 您显然正在尝试下载上次公开发布后发布的 Java 6 版本之一。为此,您需要一份支持合同。您可以在没有支持合同的情况下从存档区域获取最新的 Java6 公开版本。
  • “我正在尝试了解如何从 Oracle 获得支持” - 如果您需要 Java 支持,请联系 Oracle 销售。 :-)

标签: java build rt.jar


【解决方案1】:

Java 9 构建未生成“rt.jar”文件的原因是 Java 9 不再具有“rt.jar”或“tools.jar”。正如JEP 220 所说:

“以前存储在 lib/rt.jar、lib/tools.jar、lib/dt.jar 和各种其他内部 jar 文件中的类和资源文件现在将以更有效的格式存储在特定于实现的文件中在lib目录中。这些文件的格式将不指定,如有更改,恕不另行通知。"

所以...基本上...您的 Java 9 版本正在运行。

如果你想尝试修改部分 Java 类库,我建议以下可能的方法:

  • 使用具有“rt.jar”的 Java 8 ...
  • 在您的 Java 9 源代码树中进行更改并以正常方式构建。
  • 弄清楚如何通过修改 Java 9 构建过程来注入您的更改。
  • 了解“特定于实现的文件”的工作原理,并使用构建过程使用的工具注入您的更改。

【讨论】:

  • 一开始没看到源码,但是有!构建库的更简单方法会很好,因为在开发时我会使用较慢的代码。如果我可以提取 java.lang 并覆盖,那就太好了。但是能够完全访问代码真是太棒了。谢谢!
  • 特定于实现意味着他们现在构建 .so 和 .dll,预编译代码 - 比 java 快得多,优化而不是 JIT 加载时间。我还没有做过基准测试,但并不是代码运行得更快,而是启动得更快。没有延迟——你还记得那个老笑话吗?敲敲。谁在那里。 [长时间停顿] Java。
  • Java 构建基础架构用于支持 Java 团队和为其他平台构建 Java 的下游人员的需求。虽然如果他们支持人们做实验性的事情会“很好”,但这不是他们的职权范围。我注意到你们关于 Java 性能的 cmets。
猜你喜欢
  • 2012-03-30
  • 2020-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
  • 2012-12-11
  • 2015-08-20
相关资源
最近更新 更多