以下是JDK8存储库的更改

时间:2012-10-18 05:32:07

标签: java version-control mercurial java-8

我想跟随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中的内容呢?

3 个答案:

答案 0 :(得分:4)

根据Mercurial,标记和合并变更集通常没有任何实质性的代码更改。添加标记会更改存储库中的本地.hgtags文件并立即提交。如果代码在合并期间实际更改,则合并可能会有大量代码更改,例如合并的文件发生冲突时。当前位于存储库顶端(this onethis one)的合并实际上只是在.hgtags文件中进行合并,因此根本没有代码。

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

现在,的提交有重大变化的是那些以数字开头的提交(例如this one)。这些数字与bug数据库中的问题编号直接相关。例如,I just linked以“7197849”开头的那个,它与this bug report.完全相关。

一些评论:如果您想更全面地了解进度,可以查看为项目on this page定义的里程碑。还有一些很好的入门教程,例如this one by Joel Spolsky,可以教你一些Mercurial基础知识,例如合并及其含义。

<强>因此...

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

  • Top-level repository index - 列出在OpenJDK网站上通过Mercurial管理的所有存储库。只需查看以jdk8开头的内容,以及lambdanio等内容。
  • hotspot - 实际的JVM更改。这些是对Hotspot JVM的本机C / C ++代码所做的更改。
  • swing/jdk - 对Swing的.java文件的更改,包括共享代码和不同平台。

当然,还有其他人,但为自己探索是一半的乐趣(或战斗,取决于你如何看待它)。另请注意,并非所有JDK8内容都属于jdk8个回购。例如,Lambda project存储库以lambda为前缀。

最后一件事:如果您想浏览存储库本身,请使用顶部导航栏中的“manifest”链接。它会带你到一个探索者页面。如果您愿意,也可以随时将源代码下载为zip。它都是开源的,因此可以随时下载。

希望有所帮助。快乐狩猎:)

答案 1 :(得分:3)

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

我通常会下载代码并自行构建。有工具可以看到实际的变化(如TortoiseHG)。这就是我的工作:

如何构建JDK 8

以下指南介绍了如何使用Open JDK 8 Developer Lambda Project构建Ubuntu Linux 12.04 (Precise)。如果您需要有关构建过程如何工作的更多详细信息,请参阅README for the New Build System。对于其他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 Project源代码
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。

实际上,上一个命令只是下载项目林的根目录。您仍然需要下载其余子项目的mercurial存储库(即corba,jaxp,jaxw,langtools,jdk和hotspot)。您可以通过运行位于刚签出的项目的根文件夹中的命令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内存的英特尔酷睿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 API正在JDK子项目中积极开发。

由于项目使用Mercurial,您可以使用TortoiseHG与您的存储库进行交互,并查看已更改的内容。只需找到一个项目目录并运行TortoiseHG命令:

cd ~/lambda/jdk
thg

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

如何创建Java文档

虽然configure命令带有一个名为--enable-docs的选项,它应该在构建期间自动生成Java文档,但是从今天开始,这个标志似乎没有做任何事情。因此,您可以使用以下命令生成javadoc:

~/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工作的列表包。添加您认为必要的任何其他包。

答案 2 :(得分:1)

您正在查看的repo是JDK8源树的“根”或“顶部”仓库。它主要包含makefile和其他配置文件,因此这对变更集历史记录不太感兴趣。有嵌套的存储库包含有趣的源代码。例如,Hotspot JVM位于hotspot,类库位于jdk,javac编译器和其他工具位于langtools

OpenJDK Developer's Guide中详细介绍了这种安排。