共計(jì) 4587 個(gè)字符,預(yù)計(jì)需要花費(fèi) 12 分鐘才能閱讀完成。
本文丸趣 TV 小編為大家詳細(xì)介紹“怎么使用自定義 Maven 設(shè)置文件”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“怎么使用自定義 Maven 設(shè)置文件”文章能幫助大家解決疑惑,下面跟著丸趣 TV 小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
Mavensettings.xml 文件定義了以各種方式配置 Maven 執(zhí)行的值。最常見的是,它用于定義本地存儲(chǔ)庫(kù)位置、備用遠(yuǎn)程存儲(chǔ)庫(kù)服務(wù)器以及私有存儲(chǔ)庫(kù)的身份驗(yàn)證信息。如果您已經(jīng)有一個(gè) Java 應(yīng)用程序,您可以在本示例中使用它。否則,從 Heroku 上的 Java 入門文章創(chuàng)建一個(gè)簡(jiǎn)單的應(yīng)用程序。
創(chuàng)建自定義設(shè)置文件
當(dāng) settings.xml 應(yīng)用程序的根目錄中存在名為的文件時(shí),Heroku 的 Java 支持將在編譯時(shí)自動(dòng)使用它來(lái)配置 Maven。
為了演示這一點(diǎn),settings.xml 在 Java 項(xiàng)目的根目錄中添加一個(gè)文件,并將以下代碼放入其中。
?xml version= 1.0 encoding= UTF-8 ? settings xmlns= http://maven.apache.org/SETTINGS/1.0.0
xmlns:xsi= http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation= http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd
profiles
profile
id jboss-public /id
repositories
repository
id jboss-public-repository /id
name JBoss Public Maven Repository Group /name
url http://repository.jboss.org/nexus/content/groups/public/ /url
/repository
/repositories
/profile
/profiles
activeProfiles
activeProfile jboss-public /activeProfile
/activeProfiles /settings
這告訴 Maven 在解析應(yīng)用程序的依賴項(xiàng)時(shí)搜索托管在 http://repository.jboss.org/ 的存儲(chǔ)庫(kù)。存儲(chǔ)庫(kù)必須使用 HTTP 或 HTTPS 尋址。
我們可以通過(guò)將 - s 選項(xiàng)添加到任何 Maven 任務(wù)來(lái)在本地測(cè)試設(shè)置。但首先,我們需要向項(xiàng)目添加一個(gè)新的依賴項(xiàng)。該 jboss.web.servlet-api 庫(kù)是一個(gè)很好的示例,因?yàn)樗鼉H在 JBoss 存儲(chǔ)庫(kù)中可用。將以下元素添加到您的項(xiàng)目的 pom.xml:
dependency
groupId jboss.web /groupId
artifactId servlet-api /artifactId
version 2.1.0.GA /version /dependency
現(xiàn)在運(yùn)行以下命令,Maven 將下載工件。
mvn -s settings.xml dependency:list
[INFO] Scanning for projects...
...Downloading: http://repository.jboss.org/nexus/content/groups/public/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.pomDownloaded: http://repository.jboss.org/nexus/content/groups/public/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.pom (195 B at 0.2 KB/sec)Downloading: http://repository.jboss.org/nexus/content/groups/public/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.jarDownloaded: http://repository.jboss.org/nexus/content/groups/public/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.jar (84 KB at 90.8 KB/sec)
如果我們沒(méi)有使用自定義設(shè)置文件,構(gòu)建就會(huì)失敗,Maven 會(huì)產(chǎn)生這樣的錯(cuò)誤:
Downloading: http://repo.maven.apache.org/maven2/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.pom
[WARNING] The POM for jboss.web:servlet-api:jar:2.1.0.GA is missing, no dependency information available
Downloading: http://repo.maven.apache.org/maven2/jboss/web/servlet-api/2.1.0.GA/servlet-api-2.1.0.GA.jar
[ERROR] Failed to execute goal on project helloworld: Could not resolve dependencies for project com.example:helloworld:jar:1.0-SNAPSHOT: Could not find artifact jboss.web:servlet-api:jar:2.1.0.GA in central (http://repo.maven.apache.org/maven2) - [Help 1]
現(xiàn)在將 settings.xml 和 pom.xml 更改添加到您的 Git 存儲(chǔ)庫(kù)并像這樣部署到 Heroku:
當(dāng) Maven 在 dyno 上運(yùn)行時(shí),我們看到的輸出與我們?cè)诒镜乜吹降妮敵鱿嗤_@是有效的,因?yàn)?Heroku 檢測(cè) settings.xml 根目錄中的文件,并將 - s 選項(xiàng)添加到 Maven 命令。接下來(lái),我們將討論如何自定義此位置。
定義 MAVEN_SETTINGS_PATH 配置變量
如果您不希望該 settings.xml 文件位于根目錄中,或者您打算在不同的設(shè)置配置之間頻繁更改,您可能更愿意將設(shè)置文件放在自定義位置。Heroku 通過(guò) MAVEN_SETTINGS_PATHconfig 變量提供此功能。
我們可以通過(guò)將現(xiàn)有文件移動(dòng) settings.xml 到 support/ 目錄中并像這樣重命名來(lái)演示此功能:
mkdir -p support
git mv settings.xml support/jboss-settings.xml
現(xiàn)在我們通過(guò)定義 MAVEN_SETTINGS_PATH 相對(duì)于根目錄來(lái)告訴 Heroku 設(shè)置文件所在的位置。
heroku config:set MAVEN_SETTINGS_PATH=support/jboss-settings.xml
在測(cè)試更改之前,我們?cè)黾恿?servlet-api 的版本——強(qiáng)制 Maven 再次下載它。更改 pom.xmlto version 中的依賴項(xiàng) 2.1.1.GA。它應(yīng)該是這樣的:
dependency
groupId jboss.web /groupId
artifactId servlet-api /artifactId
version 2.1.1.GA /version /dependency
現(xiàn)在將更改提交到 Git,然后像這樣重新部署到 Heroku:
git commit -am moved settings file and incremented servlet-api version git push heroku master
Maven 將再次從 JBoss 存儲(chǔ)庫(kù)下載依賴項(xiàng)。這提供了一些靈活性,但有時(shí)在您的項(xiàng)目中自定義位置是不夠的。您可能希望將文件完全保留在您的代碼庫(kù)之外。
定義 MAVEN_SETTINGS_URL 配置變量
當(dāng) MAVEN_SETTINGS_URL 定義配置變量,Heroku 的將下載的文件在指定的位置,并用它來(lái)配置 Maven。在演示之前,我們必須取消設(shè)置我們?cè)谏弦粋€(gè)示例中定義的變量,因?yàn)槿绻麅蓚€(gè)變量都設(shè)置了,它將優(yōu)先:
heroku config:unset MAVEN_SETTINGS_PATH
現(xiàn)在,我們可以使用 settings.xml 來(lái)自公開可用源 (例如 Torquebox Application Server 代碼庫(kù)) 的。像這樣設(shè)置配置變量:
heroku config:set MAVEN_SETTINGS_URL= https://raw.githubusercontent.com/torquebox/torquebox/master/support/settings.xml
和以前一樣,將 servlet-api 版本增加到 2.1.2.GA,添加 pom.xml 到 Git 存儲(chǔ)庫(kù),提交更改并重新部署到 Heroku。Maven 將像之前一樣從 JBoss 存儲(chǔ)庫(kù)下載新的工件。
JBoss 存儲(chǔ)庫(kù)很方便,因?yàn)樗枪驳摹恍枰艽a即可訪問(wèn)。但并非所有存儲(chǔ)庫(kù)都如此開放。
使用受密碼保護(hù)的存儲(chǔ)庫(kù)
某些工件存儲(chǔ)庫(kù)需要用戶名和密碼才能訪問(wèn)。很多時(shí)候,存儲(chǔ)庫(kù)是托管內(nèi)部工件的私有服務(wù)器。在這種情況下,必須在 中提供訪問(wèn)存儲(chǔ)庫(kù)的憑據(jù),settings.xml 如果將文件簽入 Git 存儲(chǔ)庫(kù),這可能會(huì)出現(xiàn)問(wèn)題。
幸運(yùn)的是,Maven 設(shè)置文件可以檢測(cè)環(huán)境變量。表單中的任何標(biāo)記 ${env.ENV_VAR}(其中 ENV_VAR 是變量的名稱)都將解析為關(guān)聯(lián)環(huán)境變量的值。因此,我們可以將私有 Maven 存儲(chǔ)庫(kù)的密碼定義為 Heroku 配置變量,如下所示:
heroku config:set MAVEN_REPO_PASSWORD= deployment123
然后,我們可以用我們的變量 settings.xml 通過(guò)創(chuàng)建一個(gè)文件 server 相匹配的元素 id 中的 repository 元素中 activeProfile。
servers
server
id my-private-repo /id
username deployment /username
password ${env.MAVEN_REPO_PASSWORD} /password
/server /servers
為了演示這一點(diǎn),您將需要一個(gè)私有的 Maven 存儲(chǔ)庫(kù)。您可以通過(guò)下載 Sonatype Nexus 并按照保護(hù)存儲(chǔ)庫(kù)的說(shuō)明來(lái)創(chuàng)建存儲(chǔ)庫(kù)。或者您可以使用 JFrog Artifactory 的托管版本。在任何一種情況下,都可以使用私有存儲(chǔ)庫(kù)來(lái)發(fā)布內(nèi)部工件并將它們包含在您的 Heroku 應(yīng)用程序中。
讀到這里,這篇“怎么使用自定義 Maven 設(shè)置文件”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注丸趣 TV 行業(yè)資訊頻道。