您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“RAINBOND源碼如何構建JAVA項目配置MAVEN倉庫”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“RAINBOND源碼如何構建JAVA項目配置MAVEN倉庫”這篇文章吧。
根據大量的Rainbond用戶反饋,我們發現在Rainbond源碼構建java-maven項目的過程中,最容易出現問題的一環就是獲取構件失敗。
比如:
[ERROR] Failed to execute goal on project bq-insurance-third-party: Could not resolve dependencies for project···
這樣的報錯。
Rainbond默認提供多種maven版本供用戶選擇,對應版本及相應的資源地址獲取見下表:
Maven版本 | 獲取地址 |
---|---|
3.3.1 | http://lang.goodrain.me/jvm/maven/maven-3.3.1.tar.gz |
3.0.5 | http://lang.goodrain.me/jvm/maven/maven-3.0.5.tar.gz |
3.1.1 | http://lang.goodrain.me/jvm/maven/maven-3.1.1.tar.gz |
3.2.5 | http://lang.goodrain.me/jvm/maven/maven-3.2.5.tar.gz |
3.3.9 | http://lang.goodrain.me/jvm/maven/maven-3.3.9.tar.gz |
如果遇到Maven構建失敗,請優先確認當前maven版本有關。如果不能確定,可以下載上述資源,嘗試在本地構建。
Rainbond為每一個服務的構建環境提供緩存,Maven項目會對maven的安裝目錄,配置目錄,和本地倉庫目錄提供了緩存,用戶通過以下設置清理緩存。
<img src="https://cache.yisu.com/upload/information/20210523/355/709593.png" >
用戶應該在首次構建成功前一直開啟清除構建緩存直至構建成功。這樣可以防止緩存到了不完整或者錯誤的包,導致構建一直失敗。切記,構建會優先去緩存中獲取構件。
Rainbond源碼構建java-maven項目時,提供了默認的構建運行環境設置。
<img src="https://grstatic.oss-cn-shanghai.aliyuncs.com/images/5.1.5/jdk&maven/maven2.png" >
開啟清除構建緩存: 點擊即可在每次構建之前清除構建緩存。默認不開啟。
Maven版本: 選擇Maven版本,默認3.3.1。
禁用Maven Mirror: 點擊后禁用Maven Mirror設置,即獲取構件時不再通過rbd-repo(Artifactory)服務,直接前往中央倉庫或者pom.xml
中指定的倉庫獲取構件。后續的 MAVEN MIRROR OF
MAVEN MIRROR URL
設置失效。默認不會禁用。
MAVEN MIRROR OF: 在開啟mirror功能后,由該參數來指定對哪些倉庫進行鏡像緩存。默認為中央倉庫(central),當指定為 * 的時候,會將所有倉庫進行鏡像緩存。
MAVEN MIRROR URL: 指定鏡像倉庫地址,默認為Rainbond自帶的 maven.goodrain.me (即rbd-repo服務地址)。如果用戶具有公司內部使用的私服,推薦直接指定為其地址,指定格式類似:http://IP:8081/nexus/content/groups/public/
Maven構件參數: 默認設置為忽略單元測試。用戶根據項目情況自行設置。
Maven構件全局參數: 默認值為 clean dependency:list install
。需要注意的是,dependency:list
需要下載特定的maven plugin,故而,當用戶處于一個離線環境,并且使用的私服中沒有對應的構件時,必然會發生構建失敗的情況。請更改為 clean install
。
MAVEN構建Java參數配置: 默認配置為 -Xmx1024m
。該選項指定了maven構建時使用的內存,根據用戶環境自行設置。
需要指出的是,指定
MAVEN MIRROR OF
參數的時候,需要考慮所指定的倉庫是否可以被識別。倉庫名是在 maven所使用的setting.xml
文件中指定的,而Rainbond默認使用的setting.xml
中只會添加上述的各項配置!!!所以用戶日常構建所使用的自定義的倉庫名不會被識別。這種情況下,可以指定為 * 即可緩存所有的構件;或者,使用用戶自己的setting.xml
文件來替換Rainbond默認文件。
用戶可以配置特殊的環境變量,來指定自己在本地構建項目時所使用的 setting.xml
,指定后,默認構建環境配置中的選項都將失效。
這樣的配置將會是一個終極解決方案,用戶在本地可以構建,那么在Rainbond就也可以構建。因為使用指定的setting.xml文件后,Rainbond構建環境的一切,都和本地不再有區別。
用戶可以將自己以往使用的setting.xml
放在項目源碼目錄中,當該文件處于源碼根目錄下的時候,請這么做: 設置環境變量 BUILD_MAVEN_SETTINGS_PATH=/app/setting.xml
,即可使用到該文件。
Rainbond源碼構建時,默認會將源碼目錄全部文件存放在 /app 目錄下,故而該文件的路徑變為了 /app/setting.xml
如果setting.xml
中存在敏感信息,不宜出現在源碼目錄中。那么可以將其上傳到諸如對象存儲等處,提供下載地址。然后: 設置環境變量 MAVEN_SETTINGS_URL=http://somewhere/setting.xml
來使用該文件。
有的用戶公司內部并沒有倉庫私服,同時又希望可以在離線的環境下使用Rainbond源碼構建maven項目。那就需要利用rbd-repo(Artifactory)服務搭建自己的倉庫私服,并把依賴包上傳上去。
訪問 http://管理節點IP:8081
并用管理員賬號(admin/password
)登錄。
創建 Local 類型的Maven倉庫。示例創建一個Local
類型的Maven倉庫,名稱為 repo-local
向本地倉庫repo-local
上傳自己的jar包
查看依賴聲明信息
將repo-local添加到libs-release
虛擬倉庫中
<img src="https://cache.yisu.com/upload/information/20210523/355/709595.png" width="85%" />
<img src="https://cache.yisu.com/upload/information/20210523/355/709596.png" width="80%" />
<img src="https://cache.yisu.com/upload/information/20210523/355/709597.png" width="90%" />
訪問http://<管理節點>:8081/artifactory/list/libs-release/
或者管理節點訪問maven.goodrain.me
看能否列出你新添加的構件。
如果用戶已經擁有完整可用的repository文件夾,也可以使用 import 功能將整個倉庫完整上傳到repo-local本地倉庫中去。
<img src="https://cache.yisu.com/upload/information/20210523/355/709599.png" >
<img src="https://cache.yisu.com/upload/information/20210523/355/709601.png" >
完整上傳提供了兩種方式:從目錄掛載導入,或者上傳zip。其中第一種方式需要注意的是,上傳的路徑是要在rbd-repo容器中的路徑上傳,所以需要事先執行路徑掛載。第二種方式,則需要注意文件上傳大小限制,該值可以在admin —— Configuration——General Configuration 中設置。
通讀本篇文檔,我們可以發現執行maven構建需要注意的細節很多,這些微小的細節都可能導致構建失敗。
但是可以肯定的一點就是,在本地可以構建,那么在網絡條件相同的Rainbond環境中就可以構建。因為Rainbond執行源碼構建時,使用的原理和普通的maven構建并無不同。需要注意的,就是構建環境上微小的差別。
以下是遇到這樣的疑惑時,排查的思路:
版本差異: 這個差異包括了maven版本的差異,也包括JDK的版本差異(即使是同個大版本下不同的小版本)。遇到無法確定原因的報錯,這將是首要需要檢查的方面。有關JDK版本如何選擇,以及出現版本差異影響如何處理,請參見文檔: RAINBOND源碼構建JAVA項目選取JDK
GZIP STDIN NOT IN GZIP FORMAT: 構建日志如這種報錯,基本可以確定為獲取JDK或Maven安裝包失敗,結合文檔 源碼構建提示GZIP STDIN NOT IN GZIP FORMAT RAINBOND源碼構建JAVA項目選取JDK 加以解決。
構建緩存: 再次強調,用戶應該在首次構建成功前一直開啟清除構建緩存直至構建成功。這樣可以防止緩存到了不完整或者錯誤的包,導致構建一直失敗。切記,構建會優先去緩存中獲取構件。
獲取構件失敗: 這個問題的答案并不惟一,可能出現的情況非常多。
首先,結合構建日志中構件下載地址,來判斷獲取構件失敗時,是否使用倉庫私服,使用的是默認私服(maven.goodrain.me)抑或是用戶自定義私服(用戶自行指定的artifactory或nexus)。
如果禁用Mirror功能,則默認使用中央倉庫。這時需要判斷網絡是否可以訪問到中央倉庫,當前構件是否在中央倉庫中存在。
如果未禁用Mirror功能,并且使用了Rainbond默認倉庫私服(maven.goodrain.me),則默認代理中央倉庫。這時需要判斷網絡是否可以訪問到中央倉庫,當前構件是否在中央倉庫中存在。
如果未禁用Mirror功能,并且使用了用戶自定義私服。則需要判斷網絡是否可以訪問到指定的倉庫私服,當前構件是否在指定倉庫私服中存在。
401認證失敗: 如果構建報錯:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project dx-id: Failed to deploy artifacts: Could not transfer artifact com.dx.application:dx-id:pom:0.0.1-20190727.012351-2 from/to snapshots (http://******:8081/artifactory/libs-release): Failed to transfer file: http://*******:8081/artifactory/libs-release/com/dx/application/dx-id/0.0.1-SNAPSHOT/dx-id-0.0.1-20190727.012351-2.pom. Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1]
說明訪問用戶指定的倉庫私服是需要認證信息的,而認證信息一般儲存在用戶日常使用的 setting.xml
文件中。故而,解決這個問題最好的方式,是使用上文中提到的 自定義Setting.xml 的方式。再次強調, 自定義Setting.xml 是作為終極解決方案存在的,同樣適用于其他由于用戶倉庫私服特殊設置所導致的構件獲取失敗。
我的倉庫足夠我的項目構建所需,卻依然報錯有構件找不到: Rainbond默認的 Maven構件全局參數
為 clean dependency:list install
。需要注意的是,dependency:list
需要下載特定的maven plugin,故而,當用戶處于一個離線環境,并且使用的私服中沒有對應的構件時,必然會發生構建失敗的情況。請更改為 clean install
。
使用rbd-repo代理了其他倉庫私服: 用戶是可以使用rbd-repo組件來代理其他的遠程倉庫私服的。但是不同的倉庫私服之間傳輸構件有可能會出現奇奇怪怪的問題。故而,我們推薦用戶使用 MAVEN MIRROR URL
直接指定遠程倉庫地址,而不是使用rbd-repo代理。
以上是“RAINBOND源碼如何構建JAVA項目配置MAVEN倉庫”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。