現在開發java項目很多都用到了maven進行jar包的管理,一般在企業裏都會建立私服Nexus。近期遇到個問題,有個工程,每天啓動eclipse時,都會有一次download jar包的pom,由於網絡原因(用到代理上網),無法連接私服,導致download失敗,啓動不了。但是eclipse裏的其他工程卻沒有這樣的問題。
初步分析,相關jar包已經在本地倉庫裏,不應該再去下載什麼,就像其他項目一樣,應該直接啓動。
找到本地倉庫裏下載失敗的相關jar目錄裏的文件和其他jar目錄文件對比。會發現下載失敗的jar包目錄裏有很多
xxxxx.pom.lastUpdated這樣的文件,有些還帶些一長串的隨機碼,這些應該都是下載失敗的零時文件。類似於迅雷一開始下載就會建立臨時文件。 jar包名+.pom應該是該jar包的依賴配置,這也是爲什麼,我們只在pom.xml文件中配置一個關鍵jar,其他相關jar都會下載的原因,相當於一個依賴鏈。分析eclipse啓動的時候,會檢查一次(可能是每次啓動檢查一次,也可能是需要檢查成功一次以後就不用檢查),檢查時發現沒有有效的pom文件,就會去下載。下載繼續失敗,只是又多了幾個lastUpdated的臨時文件。
解決方法,找個能連接到Nexus的網絡,啓動一次。我的新的問題是,這樣處理後,這一天是沒問題了。到了第二天問題依舊。
公司的Nexus的服務器上沒有這幾個jar包,所以就算能連接上也只能管一天。至於nexus上爲什麼沒有,可能是後期被人刪掉了
因爲是別人移交過來的項目,開始以爲是項目的pom文件裏做了什麼特殊配置導致的。檢查過,修改過還是不行
網上找的資料說是刪掉lastUpdated文件,嘗試後無效。後來想到自己給jar包建立pom文件,找個下載好的jar包裏的pom文件來修改
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com.adobe.flex</groupId>
<artifactId>flex-messaging-common</artifactId>
<version>4.0.0</version>
<description>POM was created by Sonatype Nexus</description>
</project>
這就是基本格式,幾個配置信息都可以在項目的pom.xml中獲得,除了modelVersion,這個就暫時和version配置一樣
激動的啓動eclipse還是不行,又看到jar包目錄裏的_maven.repositories文件,和正常的jar包裏的文件對比,發現差別
flex-messaging-proxy-4.0.0.pom>jboss=
正常的是:
flex-messaging-opt-4.0.0.pom>Nexus=
就把上面改成>Nexus=
再啓動eclipse,ok。
也印證瞭解決一個問題的基本方法,對比。比較不同,一點點的改成一樣,就可以找到問題的關鍵點