maven打包上傳到私有倉(cāng)庫(kù)的實(shí)現(xiàn)步驟
1. 背景
最近有些自己制作的工具包,需要單獨(dú)抽取出來(lái)之后,在打包的時(shí)候,同時(shí)上傳到自己的maven私服倉(cāng)庫(kù),供別人引用,并且還能夠引用的時(shí)候看到源碼。
但是,在上傳的過(guò)程中總是失敗不成功,特別上火。最后總算成功,記錄下步驟,希望能夠幫助到需要的人。
2. 步驟
先說(shuō)下我的要求:
本地打包能夠自動(dòng)上傳maven私服倉(cāng)庫(kù)。
別人引用后,能夠看到源碼及注釋。
2.1 修改pom.xml
2.1.1 指定上傳倉(cāng)庫(kù)地址
首先需要到自己項(xiàng)目里的pom.xml里添加下邊一段
<distributionManagement>
<!--穩(wěn)定版本的倉(cāng)庫(kù)地址,必須是允許上傳的私服地址-->
<repository>
<id>releases</id>
<url>http://maven.aaaaaa.com/nexus/content/repositories/thirdparty</url>
</repository>
<!--開(kāi)發(fā)版本的倉(cāng)庫(kù)地址,必須是允許上傳的私服地址-->
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://maven.aaaaaa.com/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
對(duì)于我們平時(shí)的項(xiàng)目版本號(hào)是類似XX-SNAPSHOT這種的,這類就是數(shù)據(jù)開(kāi)發(fā)版本,這種上傳私服后會(huì)以版本號(hào)+時(shí)間戳的形式遞增,它上傳必須要指定<snapshotRepository>地址。
上圖中,id后邊會(huì)說(shuō),這里的url的地址,是對(duì)應(yīng)你倉(cāng)庫(kù)地址,你可以在瀏覽器里訪問(wèn)下類似http://maven.aaaaaa.com/nexus的地址,輸入賬號(hào)密碼,登錄后,如下圖4對(duì)應(yīng)的地址,就是:

需要注意的是,因?yàn)樯蠄D中,我們倉(cāng)庫(kù)有好幾個(gè),我是上傳到了3對(duì)應(yīng)的倉(cāng)庫(kù),你可以根據(jù)你們實(shí)際的倉(cāng)庫(kù)地址來(lái)就行。
另外id對(duì)應(yīng)的releases其實(shí)是與指定的maven配置文件conf/setttings.xml中對(duì)應(yīng),如下圖所示:

如果對(duì)應(yīng)的settings.xml里沒(méi)有配置<servers>對(duì)應(yīng)的標(biāo)簽,那也需要添加一下。
如下示例:
<servers>
<server>
<!--與2.1.1中的id值對(duì)應(yīng)-->
<id>releases</id>
<!--賬號(hào)密碼需要與私服登錄賬號(hào)密碼一致-->
<username>admin</username>
<password>znxd</password>
</server>
</servers>
還有,注意倉(cāng)庫(kù)的賬號(hào)密碼需要正確。
2.1.2 添加源碼插件
上邊的配置僅僅是指定倉(cāng)庫(kù)的地址,因?yàn)檫€需要讓下載依賴的人,能夠看到源碼,因此還需要有一個(gè)插件,maven-source-plugin。
再找到項(xiàng)目的pom.xml,添加如下插件:
<!-- 上傳源碼 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
最后,總結(jié)一下現(xiàn)在pom.xml新增的這倆東西的位置:
<project>
<!-----------省略多余的依賴---------->
<build>
<plugins>
<!-----------省略多余的plugin---------->
<!-- 上傳源碼 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.1</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>releases</id>
<url>http://maven.aaaaa.com/nexus/content/repositories/thirdparty</url>
</repository>
</distributionManagement>
</project>
注意:不能引用spring-boot-maven-plugin插件,這個(gè)插件一旦引入生效,就表示你當(dāng)前做的jar包是一個(gè)可運(yùn)行的包,而不是我們往私服上傳的工具包了
2.2 命令執(zhí)行
配置完成了之后,就可以執(zhí)行命令了,這里可以通過(guò)兩種命令實(shí)現(xiàn),一種是開(kāi)發(fā)工具idea里執(zhí)行,另一種是通過(guò)環(huán)境變量的mvn命令。
注意,不管用下邊哪種命令,都需要先注意版本號(hào),如果私服里存在你這個(gè)版本的包,那肯定會(huì)打包上傳不成功,可能會(huì)報(bào)錯(cuò):Return code is: 400, ReasonPhrase: Bad Request。
因此,別忘了改下版本。如下圖所示:

2.2.1 idea中執(zhí)行
如果你的開(kāi)發(fā)工具是idea,其實(shí)eclipse也一樣,建議用這種方式。
在開(kāi)發(fā)工具中,找到右側(cè)的maven project,如下圖所示:

最終的命令,其實(shí)是執(zhí)行了clean deploy。
如果執(zhí)行完后出現(xiàn)大概下邊的日志,說(shuō)明成功了。
[INFO] Building jar:*******
[INFO] Installing **** to *****
[INFO] --- **** Uploading:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
當(dāng)然,也可以通過(guò)瀏覽器去訪問(wèn)下,找下是否倉(cāng)庫(kù)里有對(duì)應(yīng)jar包。
2.2.2 mvn命令執(zhí)行
如果想使用mvn命令,那就需要注意maven環(huán)境變量配置,這里不說(shuō)咋配置mvn命令了,這里說(shuō)下步驟和注意的地方。
首先,打開(kāi)項(xiàng)目所在目錄,通過(guò)`cmd打開(kāi)當(dāng)前目錄,如下圖所示:

執(zhí)行命令如下:
mvn -s "C:\Program Files\apache-maven-3.5.011\conf\settings-154waiwang.xml" deploy
其中 -s是--settings的縮寫(xiě)。
這里我也是被坑慘了,我一直以為,因?yàn)槲以谂渲?code>maven環(huán)境變量的時(shí)候,指定了maven_home/m2_home,我覺(jué)得,當(dāng)我使用mvn命令時(shí),會(huì)自動(dòng)使用對(duì)應(yīng)的settings.xml文件進(jìn)行打包,然后并不是,所以為什么上邊需要通過(guò)-s來(lái)指定下settings.xml才可以。
如果不指定的話,會(huì)報(bào)錯(cuò)Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1] ,大概是無(wú)權(quán)限的意思??磥?lái)應(yīng)該是不指定的話,會(huì)走一個(gè)默認(rèn)的文件,因?yàn)槟莻€(gè)文件里沒(méi)有對(duì)應(yīng)的賬號(hào)密碼,因此會(huì)報(bào)錯(cuò)。
2.3 成功后的依賴
上傳成功后,可以通過(guò)地址找一下,如下圖即表示成功:

3. 擴(kuò)展
比如你做這個(gè)依賴包,可能后邊還會(huì)有更新的時(shí)候,但是如果以前的依賴包已經(jīng)被別人使用,那不可能一個(gè)個(gè)的通知使用者,maven本身提供這種自動(dòng)下載高版本的功能,只需要對(duì)version標(biāo)簽的值改一下。
如下:
<dependency>
<groupId>com.agri</groupId>
<artifactId>znxd-framework</artifactId>
<version>[1.0,)</version>
</dependency>
其中[1.0,)表示更新從1.0版本開(kāi)始的最新包。這樣有個(gè)好處就是,當(dāng)你的擴(kuò)展包更新成大于1.0的包時(shí),使用人的工程里,會(huì)自動(dòng)變更為最新的包。
這樣你就可以在寫(xiě)錯(cuò)代碼的時(shí)候,偷偷的自己更新成最新的包,避免尷尬。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
springboot項(xiàng)目中application.properties無(wú)法變成小樹(shù)葉問(wèn)題解決方案
這篇文章主要介紹了springboot項(xiàng)目中application.properties無(wú)法變成小樹(shù)葉問(wèn)題解決,本文通過(guò)圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
詳解Maven settings.xml配置(指定本地倉(cāng)庫(kù)、阿里云鏡像設(shè)置)
這篇文章主要介紹了詳解Maven settings.xml配置(指定本地倉(cāng)庫(kù)、阿里云鏡像設(shè)置),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
引入QQ郵箱發(fā)送驗(yàn)證碼進(jìn)行安全校驗(yàn)功能實(shí)現(xiàn)
最近遇到這樣的需求用戶輸入自己的郵箱,點(diǎn)擊獲取驗(yàn)證碼,后臺(tái)會(huì)發(fā)送一封郵件到對(duì)應(yīng)郵箱中,怎么實(shí)現(xiàn)呢?下面小編給大家?guī)?lái)了引入QQ郵箱發(fā)送驗(yàn)證碼進(jìn)行安全校驗(yàn)功能,需要的朋友可以參考下2023-02-02
Python爬蟲(chóng) 12306搶票開(kāi)源代碼過(guò)程詳解
這篇文章主要介紹了Python爬蟲(chóng) 12306搶票開(kāi)源代碼過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
java stream中Collectors的用法實(shí)例精講
這篇文章主要為大家介紹了java stream中Collectors的用法實(shí)例精講,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
使用maven的profile構(gòu)建不同環(huán)境配置的方法
這篇文章主要介紹了使用maven的profile構(gòu)建不同環(huán)境配置的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Spring?web開(kāi)發(fā)教程之Request獲取3種方式
這篇文章主要給大家介紹了關(guān)于Spring?web開(kāi)發(fā)教程之Request獲取3種方式的相關(guān)資料,request對(duì)象是從客戶端向服務(wù)器發(fā)出請(qǐng)求,包括用戶提交的信息以及客戶端的一些信息,需要的朋友可以參考下2023-11-11
如何利用NetworkInterface獲取服務(wù)器MAC地址
今天介紹一種通用的跨平臺(tái)的操作方式,那就是JDK自帶的NetworkInterface接口,該接口在JDK1.4已經(jīng)出現(xiàn),但是功能比較少,JDK1.6之后新增了不少新功能,比較不錯(cuò)2013-08-08
SpringBoot如何實(shí)現(xiàn)并發(fā)任務(wù)并返回結(jié)果
這篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)并發(fā)任務(wù)并返回結(jié)果問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07

