2012-06-07 42 views
2

我們在內部託管一個簡單的maven倉庫,但maven似乎沒有從中選取新的快照版本。我們的本地倉庫的settings.xml中配置有:maven 3如何確定快照是否已更新?

<snapshots> 
    <enabled>true</enabled> 
    <updatePolicy>always</updatePolicy> 
</snapshots> 

的東西,如「MVN -U」結合這一點,我希望行家如果適用於搭載了最新的快照版本。在我收集的過程中,maven將檢查metadata.xml的最後修改內容,並根據是否更新快照來確定。不過,我不完全清楚最後更新的是哪一個。舉個例子以下metadata.xml中:

<metadata> 
<groupId>com.example</groupId> 
<artifactId>example-test</artifactId> 
<version>1.0-SNAPSHOT</version> 
<versioning> 
    <versions> 
     <version>1.0-SNAPSHOT</version> 
    </versions> 
    <snapshot> 
     <timestamp>20120427.113221</timestamp> 
     <buildNumber>1335519141810</buildNumber> 
    </snapshot> 
    <lastUpdated>20120427113221</lastUpdated> 
</versioning> 

是否行家使用LASTUPDATED標籤? 「最後修改」的http頭文件? snapshot.timestamp標籤還是其他東西?

無論如何,我們看到的行爲是確實會下載最新的metadata.xml,但在那裏停止,它不會重新下載快照本身。

編輯:我注意到maven 2中可選的唯一快照功能在maven 3中已經成爲強制的。有沒有可能maven根本沒有檢測到更新的版本?從現在的模塊檢查出的maven-metadata.xml中:

<metadata modelVersion="1.1.0"> 
<groupId>com.example</groupId> 
<artifactId>example-test</artifactId> 
<version>1.0-SNAPSHOT</version> 
<versioning> 
    <snapshot> 
     <timestamp>20120607.154257</timestamp> 
     <buildNumber>1339076577</buildNumber> 
    </snapshot> 
    <lastUpdated>20120607154257</lastUpdated> 
    <snapshotVersions> 
     <snapshotVersion> 
      <extension>jar</extension> 
      <value>1.0-20120607.154257-1339076577</value> 
      <updated>20120607154257</updated> 
     </snapshotVersion> 
    </snapshotVersions> 
</versioning> 

是否行家檢查版本號? snapshotVersion的「更新」標籤?

回答

2

如果在本地工作的模塊上,並運行:

mvn clean install

這將已經安裝在你的本地倉庫副本。這個工件將處於鎖定狀態 - 這意味着它不會從遠程位置更新,除非元數據* xml已被刪除。

這是一個痛苦的屁股,如果在幾天之內你完成了你在這個模塊上的工作,並開始在其他模塊上工作,而這又依賴於這個初始模塊,因爲它不會從遠程存儲庫中選取更改。

已經爲此here提交了一個bug。但是,它不太可能在短時間內得到修復。因此,瞭解這種行爲至關重要。

+0

對不起,延遲迴復。我沒有在本地安裝模塊,但從另一個項目判斷,我認爲「maven-metadata-local.xml」在鎖定中很重要?無論如何,我已經刪除了我的Maven回購中的文件夾,並重現了這個問題:第一個Maven動作下載了jar,我更新了repo上的jar(一個新版本不是從我自己的系統推送的)並在我的系統上運行另一個maven命令。結果是隻有元數據文件被更新。 – nablex

+0

它是固定的,但現在諷刺的是它不會鎖定:即使您執行本地安裝,它也會嘗試從回購中獲取最新版本。我現在可以接受這一點。 – nablex

1

最後,問題出現在metadata.xml中。如果我們的服務器像原始請求中提到的那樣生成模型1.1.0,maven將只會更新元數據。通過切換回舊的「1.0.0」模型,它可以工作。例如metadata.xml中:

<metadata modelVersion="1.0.0"> 
<groupId>com.example</groupId> 
<artifactId>example-test</artifactId> 
<version>1.0-SNAPSHOT</version> 
<versioning> 
    <snapshot> 
     <timestamp>20120608.103301</timestamp> 
     <buildNumber>1339144381</buildNumber> 
    </snapshot> 
    <lastUpdated>20120608103301</lastUpdated> 
</versioning> 

無論故障1.1.0 metadata.xml中是行家還是在我們回購的錯誤是未知在這個時候,但至少我們可以繼續工作。