關于maven構件解析步驟請看maven---6倉庫-->6從倉庫解析依賴的機制
1依賴解析錯誤
1.1錯誤結果
Paste_Image.png
1.2產生可能原因
從私服上下載構件(依賴或插件)時由于私服服務器不穩定或者網絡原因導致傳輸文件失敗。
- 上面失敗原因是解析stanford-corenlp-3.3.1.jar失敗,而解析stanford-corenlp-3.3.1.jar失敗是因為從私服上傳輸文件到本地失敗,錯誤返回碼是500,說明私服傳輸出現問題。
- 看一下本地stanford-corenlp-3.3構件的內容:
Paste_Image.png
- 其中stanford-corenlp-3.3.1.jar.lastUpdated文件記錄的是最近一次maven根據更新規則或者(-U)命令執行的一次正常檢查更新失敗的原因。如果更新成功就沒有該文件,內容如下:
#NOTE: This is an Aether internal implementation file, its format can be changed without prior notice.
#Mon Jan 09 22:48:23 CST 2017
@default-nexus-mirror-http\://172.19.201.155\:8081/repository/maven-public/.lastUpdated=1483973303784
http\://localhost\:8081/repository/maven-public/.lastUpdated=1480213183807
http\://localhost\:8081/repository/maven-public/.error=
http\://172.19.201.155\:8081/repository/maven-public/.error=Could not transfer artifact edu.stanford.nlp\:stanford-corenlp\:jar\:3.3.1 from/to nexus-mirror (http\://172.19.201.155\:8081/repository/maven-public/)\: Failed to transfer file\: http\://172.19.201.155\:8081/repository/maven-public/edu/stanford/nlp/stanford-corenlp/3.3.1/stanford-corenlp-3.3.1.jar. Return code is\: 500, ReasonPhrase\: Server Error.
1.3解決辦法
1.在保證網絡暢通的情況下,再次執行一遍相同的maven命令,同時加上-U參數,讓maven強制更新,不然如果在新的更新周期沒到后,maven會直接將上次緩存的失敗結果返回給你,如下圖返回緩存失敗結果。
返回緩存的失敗結果
2.上一個方法有可能還會失敗:因為-U會和私服交互檢查更新pom.xml中的所有構件,如果pom.xml中的構件很多,有可能還會因為私服不穩定等原因造成此次執行失敗。那么有一種情況可以不使用-U,首先要明白,凡是pom.xml中的構件在本地倉庫中存儲xxxx.lastUpdated文件,那么maven就會去遠程倉庫檢查更新(當然如果在更新周期沒到期間會直接返回上次更新失敗結果),更新成功就會刪掉該文件,失敗會繼續存在。所以把pom.xml中構件在本地倉庫中的xxxx.lastUpdated文件刪除掉,這樣maven在執行命令時,發現依賴的構件存在直接使用,而不去更新(如果存在xxxx.lastUpdated肯定會連接私服更新),發現構件不存在就去下載。當然這只適合構件不太多情況。