首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Maven 部署至 Nexus 失敗:Error code 400 Bad Request 完整排查指南

     編輯:程式設計疑難解答

執行 mvn clean package deploy 時,構建在 maven-deploy-plugin 階段失敗,日誌顯示:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy ...
[ERROR] Could not transfer artifact ... Error code 400, Bad Request

HTTP 400 代表「請求語法錯誤或參數不合法」,Nexus 拒絕接收構件。本文系統梳理常見原因與解決步驟。

核心檢查清單

檢查項目說明驗證方式
Repository URL 結尾斜線 Nexus 要求 repository URL 必須以 / 結尾 POM <url> 及 settings.xml <id> 對應 URL 皆需以 / 結尾
Repository 類型與版本策略匹配 SNAPSHOT 版本只能部署到 Snapshot 庫;Release 版本只能部署到 Release 庫 POM <version>0.0.5-SNAPSHOT</version> → 必須對應 Snapshot 庫
Nexus 憑證權限 settings.xml 中 <server><id> 需與 POM <distributionManagement><repository><id> 完全一致 日誌顯示 from/to local-nexus → settings.xml 需有 <id>local-nexus</id>
Nexus 庫配置:允許重新部署 Snapshot 庫需開啟 Allow Redeploy;Release 庫通常禁止覆蓋 Nexus UI → Repositories → 配置該庫 → Deployment Policy
構件坐標合法性 groupId、artifactId、version 不得包含非法字元(空格、中文、特殊符號) 檢查 POM 坐標命名規範
網路/代理/防火牆 企業環境常因代理截斷請求體、或防火牆攔截大檔案上傳 嘗試 curl -v -u user:pass -T file.jar URL 直接上傳測試

針對本案例的關鍵排查步驟

1. 確認 DistributionManagement ID 與 Settings Server ID 一致

日誌顯示:from/to local-nexus (https://XXXX/nexus/content/repositories/cxb/)

  • POM 應有:<repository><id>local-nexus</id><url>https://.../cxb/</url></repository>
  • settings.xml 應有:<server><id>local-nexus</id><username>...</username><password>...</password></server>

注意:您貼出的 settings.xml 片段中同時出現 public-nexus 和 local-nexus,請確認 POM 使用的是哪一個 ID,並確保該 ID 在 settings 中只出現一次且密碼正確。

2. 檢查 Repository URL 是否以斜線結尾

<url>https://XXX/nexus/content/repositories/cxb/</url>  
<url>https://XXX/nexus/content/repositories/cxb</url>   

3. 確認 Nexus 庫類型為 Snapshot

專案版本為 0.0.5-SNAPSHOT,目標 Nexus 庫 必須是 Snapshot (宿主) 庫,且 Deployment Policy 設為 Allow Redeploy。若誤指向 Release 庫,Nexus 會拋 400。

4. 排除 Maven 元資料鎖定/損壞

嘗試刪除本地倉庫對應構件目錄:

rm -rf ~/.m2/repository/com/cmcc/dsp/open/client/DEMO/0.0.5-SNAPSHOT/

再重新 mvn clean deploy。

5. 開啟 Maven 偵錯模式獲取完整請求/回應

mvn clean deploy -X 2>&1 | tee deploy.log

搜尋 > PUT、< HTTP/1.1 400、Request Body,可見實際發送的 URL、Header、Body,對比 Nexus 存取日誌($NEXUS_HOME/sonatype-work/nexus/logs/request.log)。

快速驗證腳本 (curl)

繞過 Maven 直接測試上傳,隔離是 Maven 配置問題還是 Nexus/網路問題:

curl -v -u "username:password" \
     -T "target/DEMO-0.0.5-20160318.111746-1.jar" \
     "https://XXX/nexus/content/repositories/cxb/com/cmcc/dsp/open/client/DEMO/0.0.5-SNAPSHOT/DEMO-0.0.5-20160318.111746-1.jar"
  • 若 curl 成功 → Maven 配置問題(ID、URL、版本策略)。
  • 若 curl 同樣 400 → Nexus 權限/庫類型/防火牆/代理問題。

總結

Maven Deploy 400 Bad Request 90% 以上源於 ID 不匹配、URL 缺斜線、Snapshot/Release 庫類型錯配、或 Nexus 不允許重新部署。按清單逐項核對,配合 curl 隔離測試,可快速定位根因。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved