代码仓库
原文地址:http://openjdk.java.net/guide/repositories.html
注:如果只是阅读源码,在git中有个只读库,不能提交代码
本节描述了 OpenJDK 仓库术语与命名规则,并且包含了从 OpenJDK 仓库中获取源代码的最小指南。
注意:从其他地方也可获取OpenJDK的源代码,比如从JDK的完整分发包中获取的src.zip。但是,要想为OpenJDK提供贡献必须使用 OpenJDK Mercurial repository中提供的源码。
因为其他来源获取的源码可能包含旧版本的代码或是有不同的许可证导致不可用。
重复执行的操作,像创建变更,合并,推送新的代码等内容参考Producing a Changeset
- 术语和命名规则:定义了OpenJDK命名法。
- 安装和配置Mercurial:列举了需要安装的软件并提供了下载链接。并且简要说明了基本安装与配置。
- 克隆代码:包含了获取并复制一份私有的OpenJDK代码到本地的相关步骤。
术语和命名规则
所有OpenJDK的项目代码库都存储在Mercurial存储库中,其中包含源文件及其变更的历史记录。一些项目可能将其代码组织到了多个相关的Mercurial存储库中。
例如,
JDK 9使用一个包含多个相关存储库的森林,这些存储库包含整个JDK的组件。
基于JDK的项目IcedTea和Jigsaw也使用这个模型.
Code Tools为每个工具使用一个不相关的存储库,而Graal只使用一个存储库.
无论项目如何选择存储其代码,每个贡献者都需要克隆与他们修改的代码相关联的存储库。
——————
参考项目文档或邮件列表,以确定使用适当的存储库、开发约定和有用的工具。
——————
下面是一个典型的开发模型
源码服务与用户克隆
一个贡献者从OpenJDK源码服务器创建一个克隆(本地拷备叫9dev)用于读写源码库,他在克隆中处理代码变更,并在本地提交更改集即可。在验证了新的变更集之后,这些变更集或者直接从克隆中被推到源码服务器,或者导出并交付给提交者,提交者可以执行推送到服务器存储库中以供所有人查看。
——————
在2014年3月升级Mercurial服务器时,不再使用gate存储库。
——————
代码仓库使用下面的命名规范:
<project>/<component_path>
说明:
project: OpenJDK项目如“jdk9”,“openjfx”,“sumatra”
component_path:项目领导指定的代码存储库的中的路径
安装和配置Mercurial
Mercurial是一个免费的、跨平台的分布式源代码管理工具(类似git,后面有时间单独介绍其用法)。Mercurial的源码和二进制包可以在这个链接中找到https://www.selenic.com/mercurial/wiki/index.cgi.OpenJDK仓库推荐安装的Mercurial版本是2.6.3或更高。
Mercurial的基本安装足以进行OpenJDK库的克隆,如果需要提交代码的话,就需要如下的一些额外配置。
创建并编辑文件 ~/.hgrc ,需要最少包含如下的内容:
[ui]
username = <openjdk_username>
openjdk_username是一个普通的小写字母构成的(小于等于12个字符)数字标记(不是电子邮件地址),首字符必须为字母。该openjdk_username将在所有Mercurial更改集日志中公开可见。它将用于验证变更集作者至少是项目的作者,或者提交变更集的人至少是提交者。建议openjdk_username以某种方式与作者的全名相关,比如作者名的第一个字符后跟作者的姓。有关更多信息,请参考项目页面的“成为作者”部分.
验证配置
待安装并配置Mercurial后,按如下的步骤验证并确保配置生效:
- 确保Mercurial的最低版本是2.6.3
// 输入如下命令后可能的输出
$ hg version
Mercurial Distributed SCM (version 2.9)
(see http://mercurial.selenic.com for more information)
Copyright (C) 2005-2014 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
2.验证已启用的扩展列表是否包括fetch和mq
$ hg help
- 验证文件~/.hgrc的正确性,至少应包含类似如下内容:
$ hg showconfig
ui.username=iris
到了这一步,就可以从OpenJDK库中检索源代码了。
克隆代码
使用Mercurial时,每个开发人员使用都是源码存储库的一个克隆,它是克隆操作时文件的快照。如果要更新本地的克隆,请参考链接
沙盒仓库
除了项目存储库之外,还有一些测试存储库可以用于在Mercurial上运行测试命令,而不用担心对开发源代码造成损害。在测试存储库中可以自由的使用这些测试命令,但是需要注意,其中的内容可能随时被删除。
$ mkdir sandbox; cd sandbox
$ hg clone http://hg.openjdk.java.net/sandbox/box
destination directory: box
requesting all changes
adding changesets
adding manifests
adding file changes
added 23 changesets with 24 changes to 5 files
4 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ du -s box
46 box
源码森林
如果一个项目中有若干相关联的源码库,强烈建议开发者全部克隆所有的源码库,而不是只下载其中的一个库!只有都下载了,才能保证构建成功。下面的例子将分别用不同的方式说明如何将分支 jdk9/dev 克隆到 9dev文件夹中:
- 克隆整个森林需要用到trees扩展命令,使用的命令是tclone:
$ hg tclone http://hg.openjdk.java.net/jdk9/dev 9dev
输出见链接
注意:apt install mercurial 安装完不配置是不能使用hg tclone 命令的
2.克隆整个森林需要用到shell命令get_source.sh, 在此之前先克隆主项目:
$ hg clone http://hg.openjdk.java.net/jdk9/dev 9dev
requesting all changes
adding changesets
adding manifests
adding file changes
added 997 changesets with 1477 changes to 138 files
updating to branch default
82 files updated, 0 files merged, 0 files removed, 0 files unresolved
Then clone the repositories in the forest:
$ cd 9dev
$ sh ./get_source.sh
仅是阅读的话,可以从git中克隆指定的分支,
git clone -b jdk-11+28 https://github.com/openjdk/jdk.git --depth=1
或者干脆一点,还是下载zip包吧,天朝的网络情况做技术的都懂的
不管源码森林是如何被克隆的,下面应该是常见的结果:
$ du -s
934532 .
$ ls
ASSEMBLY_EXCEPTION hotspot LICENSE README-builds.html
common jaxp make test
configure jaxws Makefile THIRD_PARTY_README
corba jdk nashorn
get_source.sh langtools README
单个仓库
项目可能只包含一个源码库或者仅是以阅读为目的克隆源码库时,可以仅克隆单个仓库,这个源码库可能是一个源码森林的一部分。下面的例子演示如何将langtools库(不包含相关联的库)克隆到本地的当前文件夹下:
$ hg clone http://hg.openjdk.java.net/jdk9/dev/langtools
destination directory: langtools
requesting all changes
adding changesets
adding manifests
adding file changes
added 2289 changesets with 21194 changes to 7004 files
updating to branch default
6212 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ du -s langtools
84396 langtools
每天进步一点点,有时间先装修空间哈