原文地址: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