溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用Rainbond源碼構(gòu)建JAVA項(xiàng)目配置Maven倉(cāng)庫(kù)

發(fā)布時(shí)間:2021-07-30 16:47:33 來(lái)源:億速云 閱讀:119 作者:chen 欄目:云計(jì)算

本篇內(nèi)容介紹了“怎么用Rainbond源碼構(gòu)建JAVA項(xiàng)目配置Maven倉(cāng)庫(kù)”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

概述

根據(jù)大量的Rainbond用戶反饋,我們發(fā)現(xiàn)在Rainbond源碼構(gòu)建java-maven項(xiàng)目的過(guò)程中,最容易出現(xiàn)問(wèn)題的一環(huán)就是獲取構(gòu)件失敗。

比如:

[ERROR] Failed to execute goal on project bq-insurance-third-party: Could not resolve dependencies for project···

這樣的報(bào)錯(cuò)。

本文檔將詳細(xì)說(shuō)明,如何作出正確的配置去獲取項(xiàng)目需要的構(gòu)件。還有,針對(duì)“我在本地可以構(gòu)建,為何在Rainbond無(wú)法構(gòu)建?”這樣的疑問(wèn)作出解答。

閱讀本文檔,需要讀者對(duì)Rainbond構(gòu)建Java Maven項(xiàng)目原理有一定的理解。

下載與安裝Maven

Rainbond默認(rèn)提供多種maven版本供用戶選擇,對(duì)應(yīng)版本及相應(yīng)的資源地址獲取見(jiàn)下表:

Maven版本獲取地址
3.3.1http://lang.goodrain.me/jvm/maven/maven-3.3.1.tar.gz
3.0.5http://lang.goodrain.me/jvm/maven/maven-3.0.5.tar.gz
3.1.1http://lang.goodrain.me/jvm/maven/maven-3.1.1.tar.gz
3.2.5http://lang.goodrain.me/jvm/maven/maven-3.2.5.tar.gz
3.3.9http://lang.goodrain.me/jvm/maven/maven-3.3.9.tar.gz

如果遇到Maven構(gòu)建失敗,請(qǐng)優(yōu)先確認(rèn)當(dāng)前maven版本有關(guān)。如果不能確定,可以下載上述資源,嘗試在本地構(gòu)建。

清除構(gòu)建緩存

Rainbond為每一個(gè)服務(wù)的構(gòu)建環(huán)境提供緩存,Maven項(xiàng)目會(huì)對(duì)maven的安裝目錄,配置目錄,和本地倉(cāng)庫(kù)目錄提供了緩存,用戶通過(guò)以下設(shè)置清理緩存。

<img src="https://cache.yisu.com/upload/information/20210523/355/708780.png" >

用戶應(yīng)該在首次構(gòu)建成功前一直開(kāi)啟清除構(gòu)建緩存直至構(gòu)建成功。這樣可以防止緩存到了不完整或者錯(cuò)誤的包,導(dǎo)致構(gòu)建一直失敗。切記,構(gòu)建會(huì)優(yōu)先去緩存中獲取構(gòu)件。

默認(rèn)Maven構(gòu)建運(yùn)行環(huán)境設(shè)置解析

Rainbond源碼構(gòu)建java-maven項(xiàng)目時(shí),提供了默認(rèn)的構(gòu)建運(yùn)行環(huán)境設(shè)置。

<img src="https://grstatic.oss-cn-shanghai.aliyuncs.com/images/5.1.5/jdk&maven/maven2.png" >

  • 開(kāi)啟清除構(gòu)建緩存: 點(diǎn)擊即可在每次構(gòu)建之前清除構(gòu)建緩存。默認(rèn)不開(kāi)啟。

  • Maven版本: 選擇Maven版本,默認(rèn)3.3.1。

  • 禁用Maven Mirror: 點(diǎn)擊后禁用Maven Mirror設(shè)置,即獲取構(gòu)件時(shí)不再通過(guò)rbd-repo(Artifactory)服務(wù),直接前往中央倉(cāng)庫(kù)或者pom.xml中指定的倉(cāng)庫(kù)獲取構(gòu)件。后續(xù)的 MAVEN MIRROR OF MAVEN MIRROR URL 設(shè)置失效。默認(rèn)不會(huì)禁用。

  • MAVEN MIRROR OF: 在開(kāi)啟mirror功能后,由該參數(shù)來(lái)指定對(duì)哪些倉(cāng)庫(kù)進(jìn)行鏡像緩存。默認(rèn)為中央倉(cāng)庫(kù)(central),當(dāng)指定為 * 的時(shí)候,會(huì)將所有倉(cāng)庫(kù)進(jìn)行鏡像緩存。

  • MAVEN MIRROR URL: 指定鏡像倉(cāng)庫(kù)地址,默認(rèn)為Rainbond自帶的 maven.goodrain.me (即rbd-repo服務(wù)地址)。如果用戶具有公司內(nèi)部使用的私服,推薦直接指定為其地址,指定格式類似:http://IP:8081/nexus/content/groups/public/

  • Maven構(gòu)件參數(shù): 默認(rèn)設(shè)置為忽略單元測(cè)試。用戶根據(jù)項(xiàng)目情況自行設(shè)置。

  • Maven構(gòu)件全局參數(shù): 默認(rèn)值為 clean dependency:list install 。需要注意的是,dependency:list 需要下載特定的maven plugin,故而,當(dāng)用戶處于一個(gè)離線環(huán)境,并且使用的私服中沒(méi)有對(duì)應(yīng)的構(gòu)件時(shí),必然會(huì)發(fā)生構(gòu)建失敗的情況。請(qǐng)更改為 clean install。

  • MAVEN構(gòu)建Java參數(shù)配置: 默認(rèn)配置為 -Xmx1024m。該選項(xiàng)指定了maven構(gòu)建時(shí)使用的內(nèi)存,根據(jù)用戶環(huán)境自行設(shè)置。

需要指出的是,指定MAVEN MIRROR OF 參數(shù)的時(shí)候,需要考慮所指定的倉(cāng)庫(kù)是否可以被識(shí)別。倉(cāng)庫(kù)名是在 maven所使用的 setting.xml 文件中指定的,而Rainbond默認(rèn)使用的 setting.xml 中只會(huì)添加上述的各項(xiàng)配置?。?!所以用戶日常構(gòu)建所使用的自定義的倉(cāng)庫(kù)名不會(huì)被識(shí)別。這種情況下,可以指定為 * 即可緩存所有的構(gòu)件;或者,使用用戶自己的 setting.xml 文件來(lái)替換Rainbond默認(rèn)文件。

自定義Setting.xml

用戶可以配置特殊的環(huán)境變量,來(lái)指定自己在本地構(gòu)建項(xiàng)目時(shí)所使用的 setting.xml,指定后,默認(rèn)構(gòu)建環(huán)境配置中的選項(xiàng)都將失效。

這樣的配置將會(huì)是一個(gè)終極解決方案,用戶在本地可以構(gòu)建,那么在Rainbond就也可以構(gòu)建。因?yàn)槭褂弥付ǖ膕etting.xml文件后,Rainbond構(gòu)建環(huán)境的一切,都和本地不再有區(qū)別。

  • 用戶可以將自己以往使用的setting.xml 放在項(xiàng)目源碼目錄中,當(dāng)該文件處于源碼根目錄下的時(shí)候,請(qǐng)這么做: 設(shè)置環(huán)境變量 BUILD_MAVEN_SETTINGS_PATH=/app/setting.xml,即可使用到該文件。

    Rainbond源碼構(gòu)建時(shí),默認(rèn)會(huì)將源碼目錄全部文件存放在 /app 目錄下,故而該文件的路徑變?yōu)榱?/app/setting.xml

  • 如果setting.xml中存在敏感信息,不宜出現(xiàn)在源碼目錄中。那么可以將其上傳到諸如對(duì)象存儲(chǔ)等處,提供下載地址。然后: 設(shè)置環(huán)境變量 MAVEN_SETTINGS_URL=http://somewhere/setting.xml來(lái)使用該文件。

部署本地私服倉(cāng)庫(kù)

有的用戶公司內(nèi)部并沒(méi)有倉(cāng)庫(kù)私服,同時(shí)又希望可以在離線的環(huán)境下使用Rainbond源碼構(gòu)建maven項(xiàng)目。那就需要利用rbd-repo(Artifactory)服務(wù)搭建自己的倉(cāng)庫(kù)私服,并把依賴包上傳上去。

  • 訪問(wèn) http://管理節(jié)點(diǎn)IP:8081 并用管理員賬號(hào)(admin/password)登錄。

  • 創(chuàng)建 Local 類型的Maven倉(cāng)庫(kù)。示例創(chuàng)建一個(gè)Local 類型的Maven倉(cāng)庫(kù),名稱為 repo-local

  • 向本地倉(cāng)庫(kù)repo-local上傳自己的jar包

  • 查看依賴聲明信息

  • 將repo-local添加到libs-release 虛擬倉(cāng)庫(kù)中

<img src="https://cache.yisu.com/upload/information/20210523/355/708783.png" width="85%" />

<img src="https://cache.yisu.com/upload/information/20210523/355/708784.png" width="80%" />

<img src="https://cache.yisu.com/upload/information/20210523/355/708785.png" width="90%" />

訪問(wèn)http://<管理節(jié)點(diǎn)>:8081/artifactory/list/libs-release/或者管理節(jié)點(diǎn)訪問(wèn)maven.goodrain.me看能否列出你新添加的構(gòu)件。

  • 如果用戶已經(jīng)擁有完整可用的repository文件夾,也可以使用 import 功能將整個(gè)倉(cāng)庫(kù)完整上傳到repo-local本地倉(cāng)庫(kù)中去。

<img src="https://cache.yisu.com/upload/information/20210523/355/708786.png" >

<img src="https://cache.yisu.com/upload/information/20210523/355/708787.png" >

完整上傳提供了兩種方式:從目錄掛載導(dǎo)入,或者上傳zip。其中第一種方式需要注意的是,上傳的路徑是要在rbd-repo容器中的路徑上傳,所以需要事先執(zhí)行路徑掛載。第二種方式,則需要注意文件上傳大小限制,該值可以在admin —— Configuration——General Configuration 中設(shè)置。

我在本地可以構(gòu)建,為何在Rainbond無(wú)法構(gòu)建?

通讀本篇文檔,我們可以發(fā)現(xiàn)執(zhí)行maven構(gòu)建需要注意的細(xì)節(jié)很多,這些微小的細(xì)節(jié)都可能導(dǎo)致構(gòu)建失敗。

但是可以肯定的一點(diǎn)就是,在本地可以構(gòu)建,那么在網(wǎng)絡(luò)條件相同的Rainbond環(huán)境中就可以構(gòu)建。因?yàn)镽ainbond執(zhí)行源碼構(gòu)建時(shí),使用的原理和普通的maven構(gòu)建并無(wú)不同。需要注意的,就是構(gòu)建環(huán)境上微小的差別。

以下是遇到這樣的疑惑時(shí),排查的思路:

  • 版本差異: 這個(gè)差異包括了maven版本的差異,也包括JDK的版本差異(即使是同個(gè)大版本下不同的小版本)。遇到無(wú)法確定原因的報(bào)錯(cuò),這將是首要需要檢查的方面。有關(guān)JDK版本如何選擇,以及出現(xiàn)版本差異影響如何處理,請(qǐng)參見(jiàn)文檔: RAINBOND源碼構(gòu)建JAVA項(xiàng)目選取JDK

  • GZIP STDIN NOT IN GZIP FORMAT: 構(gòu)建日志如這種報(bào)錯(cuò),基本可以確定為獲取JDK或Maven安裝包失敗,結(jié)合文檔 源碼構(gòu)建提示GZIP STDIN NOT IN GZIP FORMAT RAINBOND源碼構(gòu)建JAVA項(xiàng)目選取JDK 加以解決。

  • 構(gòu)建緩存: 再次強(qiáng)調(diào),用戶應(yīng)該在首次構(gòu)建成功前一直開(kāi)啟清除構(gòu)建緩存直至構(gòu)建成功。這樣可以防止緩存到了不完整或者錯(cuò)誤的包,導(dǎo)致構(gòu)建一直失敗。切記,構(gòu)建會(huì)優(yōu)先去緩存中獲取構(gòu)件。

  • 獲取構(gòu)件失?。?這個(gè)問(wèn)題的答案并不惟一,可能出現(xiàn)的情況非常多。

    • 首先,結(jié)合構(gòu)建日志中構(gòu)件下載地址,來(lái)判斷獲取構(gòu)件失敗時(shí),是否使用倉(cāng)庫(kù)私服,使用的是默認(rèn)私服(maven.goodrain.me)抑或是用戶自定義私服(用戶自行指定的artifactory或nexus)。

    • 如果禁用Mirror功能,則默認(rèn)使用中央倉(cāng)庫(kù)。這時(shí)需要判斷網(wǎng)絡(luò)是否可以訪問(wèn)到中央倉(cāng)庫(kù),當(dāng)前構(gòu)件是否在中央倉(cāng)庫(kù)中存在。

    • 如果未禁用Mirror功能,并且使用了Rainbond默認(rèn)倉(cāng)庫(kù)私服(maven.goodrain.me),則默認(rèn)代理中央倉(cāng)庫(kù)。這時(shí)需要判斷網(wǎng)絡(luò)是否可以訪問(wèn)到中央倉(cāng)庫(kù),當(dāng)前構(gòu)件是否在中央倉(cāng)庫(kù)中存在。

    • 如果未禁用Mirror功能,并且使用了用戶自定義私服。則需要判斷網(wǎng)絡(luò)是否可以訪問(wèn)到指定的倉(cāng)庫(kù)私服,當(dāng)前構(gòu)件是否在指定倉(cāng)庫(kù)私服中存在。

  • 401認(rèn)證失?。?如果構(gòu)建報(bào)錯(cuò):

    [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]


    說(shuō)明訪問(wèn)用戶指定的倉(cāng)庫(kù)私服是需要認(rèn)證信息的,而認(rèn)證信息一般儲(chǔ)存在用戶日常使用的 setting.xml 文件中。故而,解決這個(gè)問(wèn)題最好的方式,是使用上文中提到的 自定義Setting.xml 的方式。再次強(qiáng)調(diào), 自定義Setting.xml 是作為終極解決方案存在的,同樣適用于其他由于用戶倉(cāng)庫(kù)私服特殊設(shè)置所導(dǎo)致的構(gòu)件獲取失敗。

  • 我的倉(cāng)庫(kù)足夠我的項(xiàng)目構(gòu)建所需,卻依然報(bào)錯(cuò)有構(gòu)件找不到: Rainbond默認(rèn)的 Maven構(gòu)件全局參數(shù)clean dependency:list install 。需要注意的是,dependency:list 需要下載特定的maven plugin,故而,當(dāng)用戶處于一個(gè)離線環(huán)境,并且使用的私服中沒(méi)有對(duì)應(yīng)的構(gòu)件時(shí),必然會(huì)發(fā)生構(gòu)建失敗的情況。請(qǐng)更改為 clean install

  • 使用rbd-repo代理了其他倉(cāng)庫(kù)私服: 用戶是可以使用rbd-repo組件來(lái)代理其他的遠(yuǎn)程倉(cāng)庫(kù)私服的。但是不同的倉(cāng)庫(kù)私服之間傳輸構(gòu)件有可能會(huì)出現(xiàn)奇奇怪怪的問(wèn)題。故而,我們推薦用戶使用 MAVEN MIRROR URL直接指定遠(yuǎn)程倉(cāng)庫(kù)地址,而不是使用rbd-repo代理。

總結(jié)

我在本地可以構(gòu)建,為何在Rainbond環(huán)境下無(wú)法構(gòu)建?這個(gè)疑問(wèn)是用戶在使用源碼構(gòu)建功能出現(xiàn)問(wèn)題時(shí)最常向我們提出的一個(gè)疑惑。甚至也有過(guò)用戶因此放棄Rainbond的例子,我們對(duì)此感到難過(guò)。不可否認(rèn),源碼構(gòu)建這個(gè)功能涉及的知識(shí)點(diǎn)相對(duì)于其他功能而言,更加的廣泛深?yuàn)W、晦澀難明。

但是需要指出的是,Rainbond Java-Maven所使用的構(gòu)建原理,與普通的Maven構(gòu)建原理是一致的。所以從本質(zhì)上講,在本地可以構(gòu)建,在Rainbond環(huán)境下就一定可以構(gòu)建,但是構(gòu)建環(huán)境的設(shè)置,構(gòu)件如何獲取等等細(xì)節(jié)的差別,對(duì)于構(gòu)建結(jié)果的影響是非常大的。所以使用Rainbond源碼構(gòu)建Java-Maven項(xiàng)目,最重要的一點(diǎn),就是找到這些細(xì)微的差別,抹平本地環(huán)境與Rainbond構(gòu)建環(huán)境的不同。

本文檔詳細(xì)介紹了Rainbond源碼構(gòu)建Java-Maven項(xiàng)目時(shí)的各種詳細(xì)設(shè)置與操作。其中很多細(xì)節(jié)都已經(jīng)羅列出來(lái), 可以算作是源碼構(gòu)建失敗時(shí)排查問(wèn)題的詳細(xì)思路總結(jié)。希望Rainbond的用戶在通讀整篇文檔后,對(duì)于Rainbond源碼構(gòu)建功能有更深刻的了解。

“怎么用Rainbond源碼構(gòu)建JAVA項(xiàng)目配置Maven倉(cāng)庫(kù)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI