maven 部署nexus_Maven部署到Nexus
maven 部署nexus
1.概述
在上一篇文章中 ,我討論了Maven項(xiàng)目如何在本地安裝尚未部署在Maven Central(或任何其他大型且公共托管的存儲(chǔ)庫(kù))上的第三方j(luò)ar。 該解決方案僅適用于小型項(xiàng)目,在這些項(xiàng)目中安裝,運(yùn)行和維護(hù)完整的Nexus服務(wù)器可能會(huì)顯得過(guò)大。 但是,隨著項(xiàng)目的發(fā)展,Nexus很快成為托管第三方工件以及在開(kāi)發(fā)流中重用內(nèi)部工件的唯一真正成熟的選擇。 本文將展示如何使用Maven將項(xiàng)目工件部署到Nexus 。
2. pom中的Nexus要求
為了使Maven能夠部署在構(gòu)建的打包階段中創(chuàng)建的工件,它需要通過(guò)distributionManagement元素定義存儲(chǔ)信息,以在其中存儲(chǔ)打包的工件。
托管的公共Snapshots存儲(chǔ)庫(kù)在Nexus上是開(kāi)箱即用的,因此無(wú)需進(jìn)一步創(chuàng)建或配置任何內(nèi)容。 Nexus使確定其托管存儲(chǔ)庫(kù)的URL變得容易-每個(gè)存儲(chǔ)庫(kù)都顯示要添加到項(xiàng)目pom的<distributionManagement>中“ 摘要”選項(xiàng)卡下的確切條目。
3.插件
默認(rèn)情況下,Maven通過(guò)maven-deploy-plugin處理部署機(jī)制-這映射到默認(rèn)Maven生命周期的部署階段:
<plugin><artifactId>maven-deploy-plugin</artifactId><version>2.7</version><executions><execution><id>default-deploy</id><phase>deploy</phase><goals><goal>deploy</goal></goals></execution></executions> </plugin>maven-deploy-plugin是解決將項(xiàng)目部署到Nexus的任務(wù)的可行選擇,但是它并不是為了充分利用Nexus提供的功能而構(gòu)建的。 因此,Sonatype構(gòu)建了一個(gè)Nexus專(zhuān)用插件-nexus-staging-maven-plugin-該插件實(shí)際上旨在充分利用Nexus必須提供的更高級(jí)的功能-分期等功能。
盡管對(duì)于簡(jiǎn)單的部署過(guò)程,我們不需要暫存功能,但我們將繼續(xù)使用此自定義Nexus插件,因?yàn)樵摬寮膭?chuàng)建明確目的是與Nexus良好地溝通。 使用maven-deploy-plugin的唯一原因是在將來(lái)保持打開(kāi)使用Nexus替代產(chǎn)品的選項(xiàng),例如Artifactory存儲(chǔ)庫(kù)。 但是,與在項(xiàng)目的整個(gè)生命周期中可能實(shí)際更改的其他組件不同,Maven存儲(chǔ)庫(kù)管理器極不可能更改,因此不需要靈活性。 因此,在部署階段使用另一個(gè)部署插件的第一步是禁用現(xiàn)有的默認(rèn)映射:
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-deploy-plugin</artifactId><version>${maven-deploy-plugin.version}</version><configuration><skip>true</skip></configuration> </plugin>現(xiàn)在,我們可以定義:
<plugin><groupId>org.sonatype.plugins</groupId><artifactId>nexus-staging-maven-plugin</artifactId><version>1.3</version><executions><execution><id>default-deploy</id><phase>deploy</phase><goals><goal>deploy</goal></goals></execution></executions><configuration><serverId>nexus</serverId><nexusUrl>http://localhost:8081/nexus/</nexusUrl><skipStaging>true</skipStaging></configuration> </plugin>插件的部署目標(biāo)映射到Maven構(gòu)建的部署階段。 還要注意, 如前所述,在將-SNAPSHOT工件簡(jiǎn)單部署到Nexus時(shí),我們不需要分段功能,因此可以通過(guò)<skipStaging>元素將其完全禁用。
4.全局
部署到Nexus是一項(xiàng)安全的操作 -為此,在任何Nexus實(shí)例上都存在開(kāi)箱即用的部署用戶。 無(wú)法使用該部署用戶的憑據(jù)來(lái)配置Maven,以便它可以與Nexus正確交互,這不能在項(xiàng)目的pom.xml中完成。 這是因?yàn)閜om的語(yǔ)法不允許這樣做,更不用說(shuō)pom可能是公共工件的事實(shí),因此不太適合保存憑證信息。
服務(wù)器的憑證必須在全局Maven setting.xml中定義:
<servers><server><id>nexus-snapshots</id><username>deployment</username><password>the_pass_for_the_deployment_user</password></server> </servers>還可以讓服務(wù)器使用基于密鑰的安全性,而不是原始和純文本憑據(jù)。
5.部署過(guò)程
執(zhí)行部署過(guò)程很簡(jiǎn)單:
mvn clean deploy -Dmaven.test.skip=true在部署作業(yè)的上下文中,跳過(guò)測(cè)試是可以的,因?yàn)樵撟鳂I(yè)應(yīng)該是項(xiàng)目的部署基準(zhǔn)線中的最后一個(gè)作業(yè)。 這種部署管道的一個(gè)常見(jiàn)示例是一連串的Jenkins作業(yè),每個(gè)作業(yè)只有在成功完成后才觸發(fā)下一個(gè)作業(yè)。 因此,管道中的先前作業(yè)有責(zé)任運(yùn)行項(xiàng)目中的所有測(cè)試套件-到部署作業(yè)運(yùn)行時(shí),所有測(cè)試都應(yīng)該已經(jīng)通過(guò)。
如果只運(yùn)行一個(gè)命令,則可以在部署階段執(zhí)行之前使測(cè)試保持活動(dòng)狀態(tài)以運(yùn)行:
mvn clean deploy六,結(jié)論
這是將Maven工件部署到Nexus的簡(jiǎn)單但高效的解決方案。 它也有些怪異-使用nexus-staging-maven-plugin代替默認(rèn)的maven-deploy-plugin ; 分段功能被禁用等-正是這些選擇使解決方案變得簡(jiǎn)單實(shí)用。 潛在地激活全部登臺(tái)功能可能是將來(lái)文章的主題。 最后,我們將在下一篇文章中討論發(fā)布過(guò)程。
翻譯自: https://www.javacodegeeks.com/2013/05/maven-deploy-to-nexus.html
maven 部署nexus
總結(jié)
以上是生活随笔為你收集整理的maven 部署nexus_Maven部署到Nexus的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 小米10至尊纪念版是双扬声器吗
- 下一篇: 使用WebCrypto API的电子签名