Rainbond-Java源碼構建自定義JDK版本
- 2019 年 10 月 7 日
- 筆記
默認提供的JDK
Rainbond官方提供了多個版本的OpenJDK供用戶使用。這些OpenJDK的安裝包託管於好雨科技官方的OSS(對象存儲)中。能夠接入互聯網的Rainbond平台,可以通過rbd-repo組件的代理獲取這些資源,而不用人工干預。
用戶通過WEB介面配置,或在源碼根目錄創建 system.properties
,設定 java.runtime.version
來指定OpenJDK版本。
WEB介面設置的值優先順序高於
system.properties
中設定的值。
- WEB介面指定:

system.properties
指定方式:
# system.properties 目前Rainbond能識別的版本值為11,10,1.9,1.8,1.7,1.6 java.runtime.version=1.8
在不做出其他任何調整的情況下,在Rainbond執行源碼構建時,會獲取以下版本的OpenJDK資源:
OpenJDK版本 |
資源地址 |
---|---|
1.8(默認) |
http://lang.goodrain.me/jdk/cedar-14/openjdk1.8.0_201.tar.gz |
1.6 |
http://lang.goodrain.me/jdk/openjdk1.6.0_27.tar.gz |
1.7 |
http://lang.goodrain.me/jdk/cedar-14/openjdk1.7.0_201.tar.gz |
1.9 |
http://lang.goodrain.me/jdk/cedar-14/openjdk9.0.4.tar.gz |
10 |
http://lang.goodrain.me/jdk/cedar-14/openjdk10.0.2.tar.gz |
11 |
http://lang.goodrain.me/jdk/cedar-14/openjdk11.0.2.tar.gz |
特別提醒:如果maven編譯過程中發生錯誤,請自行下載對應的JDK到自己的環境中,嘗試本地構建,來確認是否由於OpenJDK版本問題導致了編譯失敗。
自定義JDK
多數用戶希望能夠自定義JDK,比如希望使用特定版本的OpenJDK,或者具備Oracle的授權使用OracleJDK。接下來就會講解如何自定義。
Rainbond平台集成了 Jforg出品的 Artifactory 作為製品庫(即rbd-repo組件)。在這裡我們可以上傳並存儲自己的資源,包括jdk包。
- 首先,訪問
http://<管理節點IP>:8081
登錄 Artifactory,默認憑證:admin/password

- 創建自定義的本地製品倉庫,並上傳自定義的jdk包。
點擊查看長動圖
需要注意的是,Artifactory 上傳文件的默認限制是不能超過 100MB。如果上傳的文件超過了這個限制,可以在 Admin > General Configuration 頁面中設置 File Upload Max Size 項為一個合適的值。
- 在平台WEB介面指定自定義JDK地址,設置處為應用構建源。
像上述方式上傳的jdk包,其地址為:http://<管理節點IP>:8081/artifactory/<自定義倉庫名>/<文件名> 類似:http://192.168.1.1:8081/artifactory/jdk2/jdk-8u201-linux-x64.tar.gz

至此,自定義JDK就完成了。
替換默認JDK
自定義JDK自由度更高,能適應更多的使用場景。但是其短板在於JDK獲取地址在每一個新建的應用中都要設置一遍。有沒有方式,可以替換Rainbond默認提供的JDK包呢?如果可以實現這個功能,那麼每次構建都不用做其他設置,使用默認路徑,即可安裝公司內部指定版本的JDK,豈不是很方便?
默認JDK的地址,實際上指向了Rainbond官方的對象存儲,這對於Artifactory而言,屬於一種遠程倉庫(remote repository)。在Artifactory中,是沒有辦法通過上傳文件,來替換遠程倉庫中的文件的。所以,我們要在本地建立另一個倉庫,來替換Rainbond官方提供的遠程倉庫。
接下來是詳細的步驟:
- 用Rainbond官方提供的 rbd-java-buildpack 鏡像作為基礎,結合自需JDK包製作鏡像(以默認的1.8版本為例)
#構建目錄的文件結構如下: . ├── Dockerfile └── jdk-8u201-linux-x64.tar.gz #這裡使用OracleJDK1.8 為例替換,用戶根據自己需求自行更改
Dockerfile內容:
FROM rainbond/buildpack:java-v5.1.5 COPY jdk-8u201-linux-x64.tar.gz /pkg/lang/jdk/cedar-14/openjdk1.8.0_201.tar.gz
構建操作:
docker build -t goodrain.me/buildpack:java-v5.1.5 .
- 啟動服務
在管理節點編輯指定配置文件:
#vi /opt/rainbond/conf/base.yaml #在末尾追加 - name: rbd-java-buildpack endpoints: - name: BUILDPACK_ENDPOINTS protocol: port: 2017 health: name: rbd-java-buildpack model: http address: 127.0.0.1:2017/lang/ max_errors_num: 3 time_interval: 30 after: - docker type: simple pre_start: docker rm rbd-java-buildpack start: >- docker run --name rbd-java-buildpack --network host -i goodrain.me/buildpack:java-v5.1.5 stop: docker stop rbd-java-buildpack restart_policy: always
啟動服務:
node service update
- 修改Artifactory中的遠程倉庫
pkg_lang
的遠程地址為http://<管理節點IP>:2017/lang
:

如果已經用Rainbond官方遠程倉庫獲取過JDK包,那麼要在 pkg_lang-cache中清除已快取的記錄。
至此,就已經將默認的OpenJDK1.8版本,替換成為指定的 OracleJDK1.8版本了。
總結
基於這篇文章,用戶已經可以靈活掌握配置使用各種JDK的方式了。
在這篇文章之後,我們會繼續發布如何靈活配置Maven環境的文章,敬請期待。