Maven倉庫從Nexus遷移到JFrog Artifactory踩坑


 1.概述
部門內用Nexus搭建Maven倉庫,倉庫中除了有配置阿里雲倉庫代理和中央倉庫代理,也有部門自己封裝的crmd平台jar包。
總體依賴傳遞為 spring-boot(官方) --> base-parent(crmd平台包) --> platform-parent(crmd平台包)  --> app-parent(crmd平台包) --> 應用代碼,平台的jar包在中間做了一些封裝和優化,比如統一spring boot等版本號,部門所有的應用的引用的spring boot版本號一致,便於查詢問題。
 
1).把crmd的包下載到本地倉庫后,調整base-parent.pom的倉庫地址,用JFrog Artifactory的倉庫地址,替換Nexus的倉庫地址。
2).本地的settings.xml中,用JFrog Artifactory的倉庫地址,替換Nexus的倉庫地址。
3)。mvn install  報了一堆的錯誤,嚇死寶寶 
 
2.問題一 報錯缺少plugin插件
2.1.報錯信息
具體報錯截取信息如下:
[WARNING] The POM for org.apache.maven.plugins:maven-site-plugin:jar:3.8.2 is missing, no dependency information available
[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-site-plugin:3.8.2: Plugin org.apache.maven.plugins:maven-site-plugin:3.8.2 or one of its dependencies could not be resolved: Failure to find org.apache.maven.plugins:maven-site-plugin:jar:3.8.2 in http://192.168.1.193:8080/artifactory/group_public_maven/ was cached in the local repository, resolution will not be reattempted until the update interval of group_public_maven has elapsed or updates are forced
2.2.分析思路
從報錯信息可以看到,是由於在中央倉庫下載插件的時候報錯,所以檢查中央倉庫是否有相關插件。
從http://192.168.1.193:8080/artifactory/group_public_maven 中央倉庫,搜索相關插件,確實沒找到。
后來對照Nexus的中央倉庫配置,發現有個2個中央倉庫地址沒配置到jfrog。
2.3 解決方案
將這2個地址配置到中央倉庫組后,再次install,以上報錯消失,問題解決
 
3.問題二 報錯[FATAL] The parents form a cycle 
3.1.報錯信息
具體報錯截取信息如下:
[WARNING] The POM for com.xzy.crmd.platform:crmd-platform-base:jar:2.1.0-20200108.084048-1 is invalid, transitive dependencies (if any) will not be available: 3 problems were encountered while building the effective model for com.xzy.crmd.platform:crmd-platform-base:[unknown-version]
[ERROR] Invalid packaging for parent POM com.xzy.crmd.platform:crmd-platform-base:[unknown-version], must be "pom" but is "jar" @ 
[ERROR] Invalid packaging for parent POM com.xzy.crmd.platform:crmd-platform-base:[unknown-version], must be "pom" but is "jar" @ 
[FATAL] The parents form a cycle: com.xzy.crmd.platform:crmd-platform-base:2.1.0-SNAPSHOT -> com.xzy.crmd.platform:crmd-platform-base:2.1.0-SNAPSHOT @ 
 
3.2.分析思路
用mvn install,是可以正常編譯,但是在運行的時候報缺少jar包,經過比對lib目錄的jar包,發現是編譯的時候,部分jar包沒自動打包進來。
mvn dependency:tree命令,查看依賴,發現有個warning:xxx   is invalid, transitive dependencies (if any) will not be available,不是很明顯,無法定位問題。
mvn dependency:tree -X命令,顯示更多錯誤信息,如3.1
分析錯誤日志,同時有fatal和error,先看fatal,是說 crmd-platform-base:2.1.0-SNAPSHOT.pom存在 The parents form a cycle (大概是 父級節點存在循環依賴)。
於是查看本地倉庫的crmd-platform-base:2.1.0-SNAPSHOT.pom,發現本級pom的artifactId與parent的artifactId一致,定位出是pom有問題,原來是上傳jar的時候,選擇自動選擇生成pom,結果生成的pom有問題
<parent>
  <groupId>com.xzy.crmd.platform</groupId>
  <artifactId>crmd-platform-base</artifactId>
  <version>2.1.0-SNAPSHOT</version>
 </parent>
 <artifactId>crmd-platform-base</artifactId>
3.3.解決方案
調整手動上傳jar方法,一次上傳的時候,同時選擇jar和pom文件,重新mvn dependency:tree -X,問題解決。
 
 
4.總結
解決maven問題,要先對maven的依賴傳遞有了解。
倉庫搜索順序如下:local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central
父級pom的dependencyManagement里面的jar,你直接在子級工程中寫<parent>標簽是沒有用的,不會自動引入的,
還要重寫一下<groupId> ,<artifactId>。
父級pom的直接dependencies里面的jar,你直接在子級工程中寫<parent>標簽,就自動引入的。
分析錯誤日志,同時有fatal和error,先看fatal


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM