nexus私服SNAPSHOT倉庫maven-metadata.xml缺失導致的Could not find artifact:***.jar


環境:maven項目,使用Nexus私服(ip:192.168.10.100),jenkins實現代碼的編譯和打包。

問題分析思路:在2021年元旦假期前,jenkins上的編譯打包任務一直正常工作,但假期后突然所有項目都編譯失敗,報錯很一致都是Could not find artifact  ******;分析問題前后可能導致問題的變更,以便定位問題

1. 所有項目都出現問題,且gitlab上未發現代碼,特別是pom.xml文件的提交記錄,可以排除代碼問題

2. 分析編譯環境maven相關設置,鑒於問題前后都是用的同一個鏡像,可以排除編譯環境maven配置錯誤的可能

3. 目前確定的變化就是時間,猜測是否2021年->2022年時間的變化觸發了nexus私服觸發了某些清除策略或機制,需要詳細分析具體Could not find artifact的包

4. 分析編譯過程download的記錄日志,發現大量路徑類似 Downloaded: http://192.168.10.100:8080/repository/public/,由此分析訪問私服網絡是沒有問題的。

5. 查看日志詳細分析未找到的依賴

Downloaded: http://192.168.10.100:8081/repository/public/io/reactivex/rxjava2/rxjava/2.2.19/rxjava-2.2.19.jar (2301 KB at 18115.6 KB/sec)
Downloading: http://maven.aliyun.com/nexus/content/groups/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] gridnt-common ...................................... SUCCESS [  2.207 s]
[INFO] gridnt-dao ......................................... FAILURE [  7.685 s]
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:36 min
[INFO] Finished at: 2022-01-04T08:07:31+00:00
[INFO] Final Memory: 104M/440M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project gridnt-dao: Could not resolve dependencies for project com.gridnt:gridnt-dao:jar:3.1.0: The following artifacts could not be resolved: com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT: 
Could not find artifact com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT in gridnt_repo (http://192.168.10.100:8081/repository/public) -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException [ERROR] After correcting the problems, you can resume the build with the command [ERROR] mvn <goals> -rf :gridnt-dao

  日志中的關鍵信息已使用紅字標出,含義表達很清晰,在私服倉庫中沒有這個jar包project-mqtt-api-dev-9-SNAPSHOT.jar。

      根據日志中的提示信息,手動構造一下私服上project-mqtt-api-dev-9-SNAPSHOT.jar的訪問路徑:

Downloaded: http://192.168.10.100:8081/repository/public/io/reactivex/rxjava2/rxjava/2.2.19/rxjava-2.2.19.jar (2301 KB at 18115.6 KB/sec)
Downloading: http://maven.aliyun.com/nexus/content/groups/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.jar
理論上應該是http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.jar
打開瀏覽器,登錄nexus私服,訪問上述url,結果返回404,表示該jar在私服上不存在

直接在私服上查找,結果可以查找到

 

 

 

 此處要注意:我想要下載的【project-mqtt-api-dev-9-SNAPSHOT.jar】,私服上的jar是帶有有時間戳【dev-9-SNAPSHOT/project-mqtt-api-dev-9-20220104.093145-1.jar】熟悉maven私服snapshot機制的人到這里基本就找到問題根源了,可惜我對此不是很了解,所以饒了彎路。

6.【彎路,可跳過】以為上述jar包名字沒有時間戳也是正確的,走上了錯誤排查路;因為不是所有私服上的jar都找不到,又先入為主覺得是受時間影響導致大jar包下載失敗,所以就歸納分析所有下載失敗的jar是否都是update比較早的包,但實際時間上並不存在共性,說明分析方向錯誤

7. 受同事啟發,發現所有下載失敗的包都是snapshots倉庫的包,release倉庫的包沒有問題;檢查pom.xml配置中私服地址對應倉庫組中是否未配置snapshots,實際已配置;調整snapshots倉庫順序,優先查詢snapshots倉庫,結果問題仍存在。

8. 對比snapshots倉庫和release倉庫設置,發現snapshots有清除策略(如下圖),但release沒有,因此懷疑是清除策略導致的問題

 

 

 

  9. 網上漫搜的過程中突然有人提到使用清除策略后,會導致maven-metadata.xml丟失,然后依賴包下載失敗,日志和我的問題類似

10. 返回查看日志,發現project-mqtt-api相關的下載有三個,依次為maven-metadata.xml、*.pom、jar包;對比之前打包成功的日志

-----編譯時下載依賴包成功日志
Downloading: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/maven-metadata.xml
...
Downloaded: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/maven-metadata.xml (2 KB at 36.9 KB/sec) Downloading: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-20210604.101653-19.pom 2/2 KB Downloaded: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-20210604.101653-19.pom (2 KB at 78.8 KB/sec) Downloading: http://192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-20210604.101653-19.jar 360/373 KB 67/67 KB 496/1661 KB 76/121 KB
..... Downloaded: http:
//192.168.10.100:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-20210604.101653-19.jar (13 KB at 229.7 KB/sec)

 

----------編譯時下載依賴包失敗日志
Downloading: http://192.168.8.205:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/maven-metadata.xml ....... Downloading: http://192.168.8.205:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.pom ........ [WARNING] The POM for com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT is missing, no dependency information available Downloading: http://192.168.8.205:8081/repository/public/com/gridnt/project-mqtt-api/dev-9-SNAPSHOT/project-mqtt-api-dev-9-SNAPSHOT.jar [ERROR] Failed to execute goal on project gridnt-dao: Could not resolve dependencies for project com.gridnt:gridnt-dao:jar:3.1.0: The following artifacts could not be resolved: com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT:
Could not find artifact com.gridnt:project-mqtt-api:jar:dev-9-SNAPSHOT in gridnt_repo (http://192.168.8.205:8081/repository/public) -> [Help 1]

對比兩個日志發現:

1)下載依賴包需要依次下載3個問題

2)下載失敗從maven-metadata.xml下載失敗開始產生的,而不只是缺少jar包,需要研究下maven-metadata.xml

3)成功下載和失敗下載對比,.pom和.jar文件的文件名多了一串數字,看起來像時間戳;結合第5步和第6步分析,我們下載依賴jar包失敗是因為路徑錯誤,文件名寫錯了。

 

11. 研究發現maven-metadata.xml文件通過記錄時間戳管理snapshots倉庫的版本信息,之前jar和pom文件名稱后綴部分的數字就取自maven-metadata.xml文件中的時間戳字段。

此時問題根本在為什么下載maven-metadata.xml失敗。根據url訪問返回404,該文件不存在。

在nexus下手動查看如下圖,未找到maven-metadata.xml文件

 

  

  12.  解決方案

1)記錄上圖右下角的信息

<dependency>
  <groupId>com.gridnt</groupId>
  <artifactId>project-mqtt-api</artifactId>
  <version>dev-9-20220104.093145-1</version>
</dependency>

 2)登錄nexus,創建Rebuild Maven Metadata Files任務(此圖中已完成創建)

 

 

 

  

 3) 新建任務后,Run執行任務,然后刷新snapshots倉庫樹結構頁面,發現maven-metadata.xml文件有了,且記錄的時間戳與目錄下jar和pom文件名中的時間戳一致。再去執行編譯任務下載依賴包成功了。

  

 把所有編譯時下載失敗的jar都執行任務Rebuild Maven Metadata Files。問題解決了。

總結:遇到問題,最好的定位解決途徑就是仔細分析報錯日志!

        最好的定位解決途徑就是仔細分析報錯日志!

          最好的定位解決途徑就是仔細分析報錯日志!

         重要的事情說三遍!

遺留問題:為什么會過一個假期就出現maven-metadata.xml文件丟失的情況,沒找到原因,有知道的小伙伴歡迎給我留言

  


免責聲明!

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



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