記一次maven nexus私服釋出
這是第一次使用 nexus 私服上傳自己的 jar 包到倉庫裡,各種不懂各種搜尋,百度完了又谷歌,終於大概瞭解了個流程。
maven 釋出方式
大致上可以分為 mvn deploy 和 mvn deploy:deploy-file。
- 前者是在 pom.xml 裡增加 distributionManagement 配置,直接把 jar 包和 pom.xml 等檔案一起上傳到 nexus,
- 後者是先打包好 jar 包,然後直接上傳 jar 檔案。
遇到的問題
mvn deploy:deploy-file -DgroupId=com.jpay -DartifactId=common-payment-sdk -Dversion=0.0.1-SNAPSHOT -Dpackaging=jar -Dfile=./target/common-payment-sdk-0.0.1.jar -Durl=http://10.100.86.153:8081/repository/maven-snapshots/ -DrepositoryId=nexus-snapshots mvn deploy:deploy-file -DgroupId=com.jpay -DartifactId=common-payment-sdk -Dversion=0.0.1 -Dpackaging=jar -Dfile=./target/common-payment-sdk-0.0.3.jar -Durl=http://10.100.86.153:8081/repository/maven-releases/ -DrepositoryId=nexus-release 複製程式碼
現在來說說我所遇到的問題,現在拿 jpay 這個整合支付來測試一下,經常一番努力之後,終於把 jar 包上傳到 nexus 裡了,這時想著應該要事成了,把本地 ~/.m2/repository/com/jpay 這個依賴刪除,試試看有沒有從私服上 download 依賴包,發現 mvn install 時完全沒有 download 的步驟,沒理由啊~
解決思路
於是指定一下私服地址,在 pom.xml 裡增加:
<repositories> <repository> <id>nexus</id> <name>nexus</name> <url>http://10.100.86.153:8081/repository/maven-releases/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>true</enabled> </snapshots> </repository> </repositories> 複製程式碼
再執行一次 mvn install,依然沒有反應,沒有 download,然後編譯錯誤提示找不到 jpay 依賴包。這時我再想,會不會是應該打包的時候把所有的第三方依賴都打包進去呢?於是,我又在 jpay 的 pom.xml 裡增加了個外掛配置:
<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <!-- 此處指定main方法入口的class --> <mainClass></mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin> 複製程式碼
再次打包,原本160K 的 jar 包變成了 26M 了,再次試試打包專案,終於通過了。
於是我又試著去看看別人的 jar 包會不會也把所有依賴打包進去呢?進去 ~/.m2/repository 找別人的包一看,都好小哦,再看看 pom.xml 一看,很多 dependency 在裡面,我開啟 nexus 進去找到我上傳的包看看 pom.xml 發現只有簡單的幾行:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jpay</groupId> <artifactId>payment-sdk</artifactId> <version>0.0.1</version> </project> 複製程式碼
我插~~~問題就是出在這裡,肯定是我打包的姿勢不對,於是我在 jpay 的 pom.xml 里加上分發管理配置:
<distributionManagement> <repository> <id>nexus-release</id> <name>Nexus Releases Repository</name> <url>http://10.100.86.153:8081/repository/maven-releases/</url> </repository> <snapshotRepository> <id>nexus-snapshots</id> <name>Nexus Snapshots Repository</name> <uniqueVersion>false</uniqueVersion> <layout>legacy</layout> <url>http://10.100.86.153:8081/repository/maven-snapshots/</url> </snapshotRepository> </distributionManagement> 複製程式碼
然後 mvn deploy 執行釋出,看見有上傳到 nexus success 成功的字樣,去 nexus 檢視一下 pom.xml 檔案,終於看到有 dependency 在裡面了。
刪除本地 ~/.m2/repository/com/jpay 再打包一次專案,終於能從私服上拉取到依賴包了。
事到這裡暫告一段落,改天有空再確定一下 deploy-file 上傳是不是應該用 mvn package 後連同 pom 一塊上傳。