maven打包上傳到私有倉庫的實現(xiàn)步驟
1. 背景
最近有些自己制作的工具包,需要單獨抽取出來之后,在打包的時候,同時上傳到自己的maven私服倉庫,供別人引用,并且還能夠引用的時候看到源碼。
但是,在上傳的過程中總是失敗不成功,特別上火。最后總算成功,記錄下步驟,希望能夠幫助到需要的人。
2. 步驟
先說下我的要求:
本地打包能夠自動上傳maven私服倉庫。
別人引用后,能夠看到源碼及注釋。
2.1 修改pom.xml
2.1.1 指定上傳倉庫地址
首先需要到自己項目里的pom.xml
里添加下邊一段
<distributionManagement> <!--穩(wěn)定版本的倉庫地址,必須是允許上傳的私服地址--> <repository> <id>releases</id> <url>http://maven.aaaaaa.com/nexus/content/repositories/thirdparty</url> </repository> <!--開發(fā)版本的倉庫地址,必須是允許上傳的私服地址--> <snapshotRepository> <id>nexus-snapshots</id> <url>http://maven.aaaaaa.com/nexus/content/repositories/snapshots</url> </snapshotRepository> </distributionManagement>
對于我們平時的項目版本號是類似XX-SNAPSHOT
這種的,這類就是數(shù)據(jù)開發(fā)版本,這種上傳私服后會以版本號+時間戳的形式遞增,它上傳必須要指定<snapshotRepository>
地址。
上圖中,id
后邊會說,這里的url
的地址,是對應(yīng)你倉庫地址,你可以在瀏覽器里訪問下類似http://maven.aaaaaa.com/nexus
的地址,輸入賬號密碼,登錄后,如下圖4
對應(yīng)的地址,就是:
需要注意的是,因為上圖中,我們倉庫有好幾個,我是上傳到了3
對應(yīng)的倉庫,你可以根據(jù)你們實際的倉庫地址來就行。
另外id
對應(yīng)的releases
其實是與指定的maven
配置文件conf/setttings.xml
中對應(yīng),如下圖所示:
如果對應(yīng)的settings.xml
里沒有配置<servers>
對應(yīng)的標簽,那也需要添加一下。
如下示例:
<servers> <server> <!--與2.1.1中的id值對應(yīng)--> <id>releases</id> <!--賬號密碼需要與私服登錄賬號密碼一致--> <username>admin</username> <password>znxd</password> </server> </servers>
還有,注意倉庫的賬號密碼需要正確。
2.1.2 添加源碼插件
上邊的配置僅僅是指定倉庫的地址,因為還需要讓下載依賴的人,能夠看到源碼,因此還需要有一個插件,maven-source-plugin
。
再找到項目的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
插件,這個插件一旦引入生效,就表示你當前做的jar包是一個可運行的包,而不是我們往私服上傳的工具包了
2.2 命令執(zhí)行
配置完成了之后,就可以執(zhí)行命令了,這里可以通過兩種命令實現(xiàn),一種是開發(fā)工具idea
里執(zhí)行,另一種是通過環(huán)境變量的mvn
命令。
注意,不管用下邊哪種命令,都需要先注意版本號,如果私服里存在你這個版本的包,那肯定會打包上傳不成功,可能會報錯:Return code is: 400, ReasonPhrase: Bad Request
。
因此,別忘了改下版本。如下圖所示:
2.2.1 idea中執(zhí)行
如果你的開發(fā)工具是idea
,其實eclipse
也一樣,建議用這種方式。
在開發(fā)工具中,找到右側(cè)的maven project
,如下圖所示:
最終的命令,其實是執(zhí)行了clean deploy
。
如果執(zhí)行完后出現(xiàn)大概下邊的日志,說明成功了。
[INFO] Building jar:*******
[INFO] Installing **** to *****
[INFO] --- **** Uploading:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
當然,也可以通過瀏覽器去訪問下,找下是否倉庫里有對應(yīng)jar包。
2.2.2 mvn命令執(zhí)行
如果想使用mvn
命令,那就需要注意maven環(huán)境變量配置,這里不說咋配置mvn命令了,這里說下步驟和注意的地方。
首先,打開項目所在目錄,通過`cmd打開當前目錄,如下圖所示:
執(zhí)行命令如下:
mvn -s "C:\Program Files\apache-maven-3.5.011\conf\settings-154waiwang.xml" deploy
其中 -s
是--settings
的縮寫。
這里我也是被坑慘了,我一直以為,因為我在配置maven
環(huán)境變量的時候,指定了maven_home
/m2_home
,我覺得,當我使用mvn
命令時,會自動使用對應(yīng)的settings.xml
文件進行打包,然后并不是,所以為什么上邊需要通過-s
來指定下settings.xml
才可以。
如果不指定的話,會報錯Return code is: 401, ReasonPhrase: Unauthorized. -> [Help 1]
,大概是無權(quán)限的意思??磥響?yīng)該是不指定的話,會走一個默認的文件,因為那個文件里沒有對應(yīng)的賬號密碼,因此會報錯。
2.3 成功后的依賴
上傳成功后,可以通過地址找一下,如下圖即表示成功:
3. 擴展
比如你做這個依賴包,可能后邊還會有更新的時候,但是如果以前的依賴包已經(jīng)被別人使用,那不可能一個個的通知使用者,maven本身提供這種自動下載高版本的功能,只需要對version
標簽的值改一下。
如下:
<dependency> <groupId>com.agri</groupId> <artifactId>znxd-framework</artifactId> <version>[1.0,)</version> </dependency>
其中[1.0,)
表示更新從1.0
版本開始的最新包。這樣有個好處就是,當你的擴展包更新成大于1.0
的包時,使用人的工程里,會自動變更為最新的包。
這樣你就可以在寫錯代碼的時候,偷偷的自己更新成最新的包,避免尷尬。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java8中用foreach循環(huán)獲取對象的index下標詳解
這篇文章主要給大家介紹了關(guān)于Java8中用foreach循環(huán)獲取對象的index下標的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2021-04-04解決java.util.NoSuchElementException異常正確方法
java.util.NoSuchElementException是Java中的一種異常,表示在迭代器或枚舉中找不到元素,這篇文章主要給大家介紹了關(guān)于解決java.util.NoSuchElementException異常的相關(guān)資料,需要的朋友可以參考下2023-11-11使用postman傳遞list集合后臺springmvc接收
這篇文章主要介紹了使用postman傳遞list集合后臺springmvc接收的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08