首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Maven POM 報錯「Plugin not found」快速解決:本地倉庫殘留檔案清理法

     編輯:Java 綜合教學

錯誤現象

新建 Maven 專案後,POM 檔紅色報錯:

Plugin org.apache.maven.plugins:maven-surefire-plugin:2.12.4 or one of its dependencies could not be resolved

Maven 報錯截圖

根因分析

Maven 從中央倉庫下載依賴時,若網路中斷或伺服器異常,會在本地倉庫留下 .lastUpdated 殘留檔案。Maven 後續嘗試解析依賴時,檢測到此檔案會誤以為「已嘗試下載但失敗」,直接報錯而不再嘗試重新下載。

解決步驟

  1. 定位本地倉庫:預設 ~/.m2/repository (Windows: C:\Users\用戶名\.m2\repository)
  2. 進入問題插件目錄:
    org\apache\maven\plugins\maven-surefire-plugin\2.12.4\
  3. 刪除所有 .lastUpdated 檔案:
    maven-surefire-plugin-2.12.4.pom.lastUpdated
    maven-surefire-plugin-2.12.4.jar.lastUpdated
    ... (所有 .lastUpdated 結尾檔案)
  4. 重新導入依賴:IDE 中右鍵專案 → Maven → Reload Project / Reimport

通用清理腳本 (跨平台)

Windows 批次檔 (clean-lastupdated.bat)

@echo off
echo 正在清理本地倉庫 .lastUpdated 檔案...
for /r "%USERPROFILE%\.m2\repository" %%f in (*.lastUpdated) do (
    del "%%f"
    echo 已刪除: %%f
)
echo 清理完成!
pause

Linux/Mac Shell 腳本 (clean-lastupdated.sh)

#!/bin/bash
REPO_DIR="$HOME/.m2/repository"
echo "正在清理 $REPO_DIR 下的 .lastUpdated 檔案..."
find "$REPO_DIR" -name "*.lastUpdated" -type f -delete -print
echo "清理完成!"

另一常見坑:Log4j 1.2.15+ 版本傳遞依賴缺失

現象:POM 加入 log4j:log4j:1.2.17 後報錯缺少 javax.jms、com.sun.jdmk、com.sun.jmx 等依賴。

原因:Log4j 1.2.15 起引入了 JMS/JMX 等可選依賴,但這些依賴不在中央倉庫 (授權問題),Maven 無法自動下載。

解決方案一:排除傳遞依賴 (推薦)

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    <exclusions>
        <exclusion>
            <groupId>javax.jms</groupId>
            <artifactId>jms</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.jdmk</groupId>
            <artifactId>jmxtools</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.sun.jmx</groupId>
            <artifactId>jmxri</artifactId>
        </exclusion>
    </exclusions>
</dependency>

解決方案二:降級至 1.2.14 (無此問題)

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
</dependency>

解決方案三:遷移至 Log4j 2.x / SLF4J + Logback (現代最佳實踐)

<!-- SLF4J API -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>2.0.9</version>
</dependency>
<!-- Logback 實作 -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.11</version>
</dependency>

預防性最佳實踐

  • ✅ 使用 mvn dependency:purge-local-repository 定期清理
  • ✅ 配置 Maven 鏡像 (阿里雲/騰訊雲) 加速下載、減少中斷
  • ✅ 關鍵依賴鎖定版本,避免傳遞依賴衝突
  • ✅ 使用 mvn dependency:tree / analyze 定期檢查依賴健康度
  • ✅ 團隊統一 settings.xml 與 dependencyManagement
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved