3

我想关注JDK8的发展,但我在repo中看到的充其量是奇怪的:

6 days ago  katleman    Added tag jdk8-b60 for changeset e07f499b9dcc default tip   changeset | manifest
7 days ago  katleman    Merge jdk8-b60  changeset | manifest

大多数更改看起来像“为变更集 XXX 添加了标签 jdk8-b60”或“合并 XXX”,有一些条目看起来像实际的代码更改,但没有指向代码的链接。实际上,没有一次单击使我获得了任何有用的东西。

我对 Mercurial 一无所知,但我应该吗?只要点击 Github,我就可以到达某个地方......

那么我怎样才能了解 JDK8 中发生的事情呢?

4

3 回答 3

4

根据 Mercurial,标记和合并变更集通常没有任何实质性的代码更改。添加标签会更改.hgtags存储库中的本地文件并立即提交。如果在合并过程中实际更改了代码,例如当正在合并的文件发生冲突时,合并可能会发生大量代码更改。当前靠近存储库顶端的合并(这个这个)实际上都只是在文件中发生的合并.hgtags,所以它们根本没有代码。

任何以“已添加标签”开头的内容都几乎可以保证只是对 的更改.hgtags,并且大多数合并也不会有任何实质性内容。

现在,确实有重大变化的提交是以数字开头的提交(例如这个)。这些数字与错误数据库中的问题编号直接相关。例如,我刚刚链接的那个以“7197849”开头,它与此错误报告完全相关。.

几点说明:如果您想更普遍地跟踪进度,可以查看此页面上为项目定义的里程碑。还有一些不错的入门教程,例如Joel Spolsky 的这篇教程,可以教您一些 Mercurial 基础知识,例如合并及其含义。

所以...

话虽如此,看起来您实际链接到的存储库可能不是您要查找的存储库。jdk8除了您链接的存储库之外,实际上还有其他几个以前缀为前缀的存储库。这里有一些有趣的地方可以寻找存储库和代码:

  • 顶级存储库索引- 列出 OpenJDK 网站上通过 Mercurial 管理的所有存储库。只需查找以 开头的那些jdk8,其中包括lambdanio
  • 热点- 实际的 JVM 更改。这些是对 Hotspot JVM 的本机 C/C++ 代码所做的更改。
  • swing/jdk - 对 Swing 的 .java 文件的更改,包括共享代码和不同平台。

当然,还有其他的,但为自己探索是一半的乐趣(或战斗,取决于你如何看待它)。另请注意,并非所有 JDK8 的东西都属于jdk8repo。例如,Lambda 项目存储库以lambda.

最后一件事:如果您想浏览存储库本身,请使用顶部导航栏上的“清单”链接。它将带您进入某种资源管理器页面。如果您愿意,您也可以随时将源代码下载为 zip。它都是开源的,因此可以随时下载。

希望有帮助。狩猎愉快:)

于 2012-10-18T06:43:56.823 回答
3

也许这个答案有点矫枉过正,但我​​希望你至少觉得它有用。

我通常下载代码并自己构建。有一些工具可以查看实际变化是什么(例如 TortoiseHG)。这就是我所做的:

如何构建 JDK 8

以下指南介绍了如何使用Ubuntu Linux 12.04 (Precise)构建Open JDK 8 Developer Lambda 项目。如果您需要有关构建过程如何工作的更多详细信息,请参阅新构建系统的自述文件。对于其他 JDK 项目,例如主 JDK 8 森林或 Jigsaw 森林,该过程几乎相同。

如何构建第一次

安装 Ubuntu 后,您必须安装以下附加软件包:

sudo apt-get install build-essential
sudo apt-get install mercurial
sudo apt-get install tortoisehg
sudo apt-get install awk
sudo apt-get install m4
sudo apt-get install ccache
sudo apt-get install openjdk-7-jdk
sudo apt-get install ant
sudo apt-get install vim
sudo apt-get install libX11-dev 
sudo apt-get install libxext-dev 
sudo apt-get install libxrender-dev 
sudo apt-get install libxtst-dev
sudo apt-get install libcups2-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libasound2-dev

使用 Mercurial 下载 Open JDK8 Lambda 项目源代码

hg clone http://hg.openjdk.java.net/lambda/lambda

其他项目森林是:

http://hg.openjdk.java.net/jdk8/jdk8
http://hg.openjdk.java.net/jigsaw/jigsaw

尽管 Jigsaw 已推迟到 JDK 9。

前面的命令,实际上只是下载了项目林的根目录。您仍然需要为其余的子项目(即 corba、jaxp、jaxw、langtools、jdk 和热点)下载 mercurial 存储库。您可以通过运行get_source.sh位于您刚刚签出的项目的根文件夹中的命令来执行此操作。

cd ~/lambda
sh ./get_source

所有其他项目存储库的下载可能需要一段时间,所以请耐心等待。

下载所有项目存储库后,您就可以配置构建了。假设您仍然位于 lambda 目录中

cd commom/makefiles
sh ../autoconf/configure 

此命令:configure有很多选项,您可以设置这些选项来自定义 JDK 的构建方式。您可以通过运行来查看这些选项的文档configure --help。但是,在没有任何参数的情况下运行命令就足够了。

虽然您仍然位于 lambda/common/makefiles,但现在您已准备好构建 JDK 8。

make images

make命令还有多个选项来构建 JDK。如果您键入make help,您将看到它们全部。

根据您计算机上的资源量(内核和内存),此编译过程可能需要一些时间。我在具有单核和 1GB 内存的虚拟机中做过一次,它花了一整夜。我现在在具有 4 核和 4 GB 内存的 Intel Core i7 中执行此操作,并且需要不到 1 小时。无论如何,一旦编译准备好,JDK 映像位于:

~/lambda/build/linux-x64-normal-server-release/images/j2sdk-image

该目录linux-x64-normal-server-release在您的计算机上可能具有不同的名称,具体取决于其体系结构。

一切顺利,您现在可以使用此构建版本来测试 JDK 8 的新功能。

如何获取更新和重建

随着 OpenJDK 工作的进展,您可能希望不时获取最新的源代码并重新构建整个东西,对吧?

要更新到最新的源代码,只需get_source.sh再次运行命令:

cd lambda
sh ./get_source

您可能不需要configure再次运行该命令,除非您的硬件架构(即更多内核、更多内存)或您安装的软件(即安装的 jdk)发生了变化。但是,如果您想确定并重新运行它,请从清理并完全清除之前的构建开始:

make dist-clean

该命令将删除之前的配置并构建。

然后你可以再次配置:

cd commom/makefiles
sh ../autoconf/configure

最后,再次构建系统:

make images

如何知道发生了什么变化

显然,一旦您获得了最新版本的代码,您可能想知道自上次构建以来发生了什么变化。任何子项目(即热点、langtools 等)中的情况都可能发生了变化。但是,JDK 子项目中正在积极开发 JDK API。

由于项目使用 Mercurial,您可以使用 TortoiseHG 与您的存储库进行交互并查看发生了什么变化。只需找到项目目录之一并运行 TortoiseHG 命令:

cd ~/lambda/jdk
thg

这将启动 TortoiseHG GUI 工具,您可以在其中轻松查看存储库中所有更改的日志以及在您获得的最后一次更新中准确修改的内容,在上面的 jdk 子项目示例中。您可以通过在每个子文件夹中调用 thg 命令来查看编译器在 langtools 子项目中遭受的变化,并查看 jvm 在热点子项目中遭受的变化。

如何创建 Java 文档

尽管该configure命令带有一个名为的选项,该选项--enable-docs应该在构建期间自动生成 Java 文档,但截至今天,该标志似乎没有做任何事情。因此,您可以使用以下命令生成 javadocs:

~/lambda/build/linux-x64-normal-server-release/images/j2sdk-image/bin/javadoc \
-d ~/lambda/build/linux-x64-normal-server-release/images/j2sdk-image/docs \
-use \
-author \
-version \
-linksource \
-splitIndex \
-windowtitle 'Java 2 Platform 8.0 API Specification' \
-doctitle 'Java<sup><font size="-2">TM</font></sup> 2 Platform 8.0 API Specification' \
-header '<b>Java 2 Platform </b><br><font size="-1">8.0</font>' \
-group "Core Packages" "java.\*" \
-overview ~/lambda/jdk/src/share/classes/overview-bundled.html \
-sourcepath ~/lambda/jdk/src/share/classes \
java.lang java.util java.util.functions java.util.concurrent \
java.lang.annotation java.lang.reflect java.lang.ref

请注意,JDK 的源代码位于 ~/lambda/jdk/src/share/classes/

此处指定的列表包是执行大部分 JDK 8 工作的包。添加您认为必要的任何其他软件包。

于 2012-10-19T13:36:54.717 回答
1

您正在查看的存储库是 JDK8 源代码树的“根”或“顶级”存储库它主要包含 makefile 和其他配置文件,这就是为什么对变更集历史没有太大兴趣的原因。有包含有趣源代码的嵌套存储库。比如Hotspot JVM在hotspot,类库在jdk,javac编译器等工具在langtools

OpenJDK Developer's Guide中详细描述了这种安排。

于 2013-01-16T01:05:57.383 回答