maven發布項目到私服-snapshot快照庫和release發布庫的區別和作用及maven常用命令
在日常的工作中由於各種原因,會出現這樣一種情況,某些項目並沒有打包至mvnrepository
。如果采用原始直接打包放到lib目錄的方式進行處理,便對項目的管理帶來一些不必要的麻煩。例如版本升級后需要重新打包並,替換原有jar包等等一些額外的工作量和麻煩。為了避免這些不必要的麻煩,通常我們會通過Nexus
搭建私有的倉庫。下面着重介紹下怎么通過mvn命令將程序打包並發布到私有倉庫Nexus
中。
前提:
- 已成功安裝maven
- 已成功安裝Nexus,(管理帳號:admin,密碼:admin123)
- 項目通過maven進行管理
maven安裝目錄下setting.xml中添加如下配置
servers節點中添加:
<server>
<id>releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
注意:如果非admin用戶,需要在Nexus
中對相應的帳號設置密碼
- 打開安全設置:http://localhost:8081/nexus/#security-users
- 選擇相應的用戶-->右鍵-->reset password/set password-->進行密碼設置
- 相應的倉庫允許重新發布(Repositories-->選擇相應的倉庫-->Configuration-->Deployment Policy下拉選項中選擇“Allow Redeploy”),如果不允許重新發布,重新發布時會出現401等異常情況。
項目下pom.xml中添加如下內容
<!-- 項目發布管理 -->
<distributionManagement>
<repository>
<id>releases</id>
<name>User Project Release</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>User Project SNAPSHOTS</name>
<url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
發布到私服
切換至項目根目錄后運行:mvn clean deploy -X -Dmaven.test.skip=true
即可。如果發布成功會出現BUILD SUCCESS
的字樣。查看倉庫http://127.0.0.1:8081/nexus/content/repositories/releases/
已經包含了相應的包。
注意:
- 如果想發布到snapshot倉庫中,則需要在版本號后加上-SNAPSHOT(注意這里必須是大寫)
如:
<groupId>cc.mzone</groupId>
<artifactId>m1</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>
maven中snapshot快照庫和release發布庫的區別和作用
可參考 maven中snapshot快照庫和release發布庫的區別和作用
在使用maven過程中,我們在開發階段經常性的會有很多公共庫處於不穩定狀態,隨時需要修改並發布,可能一天就要發布一次,遇到bug時,甚至一天要發布N次。我們知道,maven的依賴管理是基於版本管理的,對於發布狀態的artifact,如果版本號相同,即使我們內部的鏡像服務器上的組件比本地新,maven也不會主動下載的。如果我們在開發階段都是基於正式發布版本來做依賴管理,那么遇到這個問題,就需要升級組件的版本號,可這樣就明顯不符合要求和實際情況了。但是,如果是基於快照版本,那么問題就自熱而然的解決了,而maven已經為我們准備好了這一切。
maven中的倉庫分為兩種,snapshot快照倉庫和release發布倉庫。snapshot快照倉庫用於保存開發過程中的不穩定版本,release正式倉庫則是用來保存穩定的發行版本。定義一個組件/模塊為快照版本,只需要在pom文件中在該模塊的版本號后加上-SNAPSHOT
即可(注意這里必須是大寫),如下:
<groupId>cc.mzone</groupId>
<artifactId>m1</artifactId>
<version>0.1-SNAPSHOT</version>
<packaging>jar</packaging>
maven2會根據模塊的版本號(pom文件中的version)中是否帶有-SNAPSHOT來判斷是快照版本還是正式版本。如果是快照版本,那么在mvn deploy時會自動發布到快照版本庫中,而使用快照版本的模塊,在不更改版本號的情況下,直接編譯打包時,maven會自動從鏡像服務器上下載最新的快照版本。如果是正式發布版本,那么在mvn deploy時會自動發布到正式版本庫中,而使用正式版本的模塊,在不更改版本號的情況下,編譯打包時如果本地已經存在該版本的模塊則不會主動去鏡像服務器上下載。
所以,我們在開發階段,可以將公用庫的版本設置為快照版本,而被依賴組件則引用快照版本進行開發,在公用庫的快照版本更新后,我們也不需要修改pom文件提示版本號來下載新的版本,直接mvn執行相關編譯、打包命令即可重新下載最新的快照庫了,從而也方便了我們進行開發。
jar包發布到指定倉庫
mvn deploy:deploy-file -DgroupId=com.xy.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar -Dfile=E:\ojdbc14.jar -Durl=http://127.0.0.1:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
jar包發布到本地緩存倉庫
mvn install -Dmaven.test.skip=true
注意:
- 如果出現400,需要注意項目下的pom.xml文件和maven使用的setting.xml文件的配置是否一致。
- 如果出現401,需要檢查maven使用的setting.xml中的帳號和密碼是否正確,相應的repository是否為“Allow Redeploy”。
- 如果使用的intellij、eclipse或myeclipse需要注意ide中使用的setting.xml和maven命令行下的setting.xml是否一致;否則或出現許多莫名其妙的問題。
參考文檔: