Logo
  • 資訊
  • 筆記
  • AI
  • 程式語言
    • Golang
    • Python
    • JavaScript
    • JAVA
    • C#
    • C++
    • .NET
  • 框架
    • Kubernetes
    • Docker
    • Spring Boot
    • Vue.js
    • Flutter
    • Nginx
  • 資料庫
    • MySQL
    • MongoDB
    • Redis
  • Linux
  • iOS
  • Android
  • 技術
    • 爬蟲
    • 反向代理
  • 資訊
  • 筆記
  • AI
  • 程式語言
    • Golang
    • Python
    • JavaScript
    • JAVA
    • C#
    • C++
    • .NET
  • 框架
    • Kubernetes
    • Docker
    • Spring Boot
    • Vue.js
    • Flutter
    • Nginx
  • 資料庫
    • MySQL
    • MongoDB
    • Redis
  • Linux
  • iOS
  • Android
  • 技術
    • 爬蟲
    • 反向代理

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

  • 2022 年 1 月 5 日
  • 筆記
  • maven, Nexus, maven-metadata

環境: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: //192.168.10.100:8080/repository/public/,由此分析訪問私服網路是沒有問題的。

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

Downloaded: //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: //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 (//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] //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
理論上應該是//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文件丟失的情況,沒找到原因,有知道的小夥伴歡迎給我留言

  

Tags: maven Nexus maven-metadata

分享此文:

  • 分享到 Twitter(在新視窗中開啟)
  • 按一下以分享至 Facebook(在新視窗中開啟)
  • 按一下以分享到 Telegram(在新視窗中開啟)
  • 分享到 Pinterest(在新視窗中開啟)
  • 分享到 LinkedIn(在新視窗中開啟)
  • 分享到 Reddit(在新視窗中開啟)
  • 分享到 WhatsApp(在新視窗中開啟)

Related Posts

  • 2022 年 1 月 5 日

關係型資料庫分庫分表系列之一

  • 2022 年 1 月 5 日

C++中的字元串

Previous post

新一輪x86處理器大戰來了:Intel反擊還是AMD衛冕?

Next post

手機越燙其實散熱越強?華為證實了

VirMach 便宜 VPS

Black Friday Flash Sale

(2021/9/14~)

1 Core CPU

1 GB Ram

20 GB SSD

1年只要 USD$5 up!!!

Tips: Offer 10 分鐘更新一次

New customers, 75% off for 2 months.

1 Core CPU

1 GB Ram

25 GB SSD

每月只要 USD$1.75!!!

VirMach VPS Hosting

VPSGamers VPS Hosting

VPSCraft VPS Hosting

VPShared VPS Hosting

QNews

熱門文章

奇異のtravel 奇幻之旅2020-09-24 8,100 views
低清小電影一鍵變4K大片?這軟體神了:效果來感受下 6,502 views
深度學習 | sklearn的train_test_split()各函數參數含義解釋(超級全) 6,200 views
【學習筆記】Iperf3網路性能測試工具 5,300 views
深度學習筆記——常用的激活(激勵)函數 5,000 views
玩遊戲 顯示卡重要還是CPU重要?終於懂了 4,800 views
晶片一樣卻便宜一大截 「丐版」顯示卡值得買嗎? 4,402 views
肯德基遊戲主機KFConsole真來了:4K 240Hz、能炸雞 3,600 views
終於有人把XGBoost 和 LightGBM 講明白了,項目中最主流的集成演算法! 3,000 views
一篇文章教會你使用Java8中的Lambda表達式 2,900 views

熱門搜尋

蘋果 JAVA 華為 小米 CPU處理器 智慧手機 特斯拉 AMD 顯示卡 Intel iPhone手機 Python 新冠病毒 電動車 電影 NVIDIA 三星 微軟 汽車 生科醫學 linux Windows作業系統 騰訊 新冠肺炎 c# 遊戲 比亞迪 MySQL 微信 Windows 10 5G 演算法 .NET 新冠疫苗 日本 美國 javascript 筆記型電腦 PC遊戲 Redmi 網友熱議 晶片 docker 馬斯克 .NET Core
. 简体中文 大陆简体 港澳繁體 马新简体 马来西亚简体 繁體中文

Copyright © 2018-2026 廣告招租