跟蹤Maven更新Snapshot依賴包時的操作


假設我在2013年03月07日08時48分52秒在我自己的電腦上使用“mvn clean install”構建了“com.my.testu:testu:1.0.1-SNAPSHOT”。

那么Maven會在本地倉庫目錄“C:\MavenRepo\com\my\testu\1.0.1-SNAPSHOT”下生成文件“maven-metadata-local.xml”,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
  <groupId>com.my.testu</groupId>
  <artifactId>testu</artifactId>
  <version>1.0.1-SNAPSHOT</version>
  <versioning>
    <snapshot>
      <localCopy>true</localCopy>
    </snapshot>
    <lastUpdated>20130307084852</lastUpdated>
    <snapshotVersions>
      <snapshotVersion>
        <extension>jar</extension>
        <value>1.0.1-SNAPSHOT</value>
        <updated>20110407084852</updated>
      </snapshotVersion>
      <snapshotVersion>
        <extension>pom</extension>
        <value>1.0.1-SNAPSHOT</value>
        <updated>20110407084852</updated>
      </snapshotVersion>
    </snapshotVersions>
  </versioning>
</metadata>

后面的幾天,其他同事更新了com.my.testu:testu:1.0.1-SNAPSHOT的內容,並發布到了公司的Maven服務器上。

公司Maven服務器上產生了文件:

  • testu-1.0.1-20130407.081828-34.jar
  • testu-1.0.1-20130407.081828-34.pom

並更新了maven-metadata.xml,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
  <groupId>com.my.testu</groupId>
  <artifactId>testu</artifactId>
  <version>1.0.1-SNAPSHOT</version>
  <versioning>
    <snapshot>
      <timestamp>20130407.081828</timestamp>
      <buildNumber>34</buildNumber>
    </snapshot>
    <lastUpdated>20130407081828</lastUpdated>
    <snapshotVersions>
      <snapshotVersion>
        <extension>jar</extension>
        <value>1.0.1-20130407.081828-34</value>
        <updated>20130407081828</updated>
      </snapshotVersion>
      <snapshotVersion>
        <extension>pom</extension>
        <value>1.0.1-20130407.081828-34</value>
        <updated>20130407081828</updated>
      </snapshotVersion>
  </versioning>
</metadata>

在這期間我的電腦上沒有發生過任何關於testu的構建。

某一天,我需要構建一個依賴於testu的項目,於是我運行了mvn clean package來打包。

這個時候,maven做了什么呢(背景:我通過配置鏡像,使我本地Maven的任何資源都是從公司的Maven服務器下載的)?

Step1:從公司的Maven服務器上下載maven-metadata.xml,重命名為“maven-metadata-<RepositoryID>.xml”,並保存到本地倉庫相應目錄。

Step2:比較maven-metadata-local.xml與maven-metadata-<RepositoryID>.xml中的lastUpdated時間戳的值。

  • 如果maven-metadata-local.xml中的時間戳比較大,則終止。
  • 如果maven-metadata-<RepositoryID>.xml中的時間戳較大,則從公司Maven服務器上下載最新版本。即:testu-1.0.1-20130407.081828-34.jar。這個過程分兩步:(1)下載testu-1.0.1-20130407.081828-34.jar到本地Maven倉庫。(2)將testu-1.0.1-20130407.081828-34.jar復制一份,覆蓋掉原先的testu-1.0.1-SNAPSHOT.jar。也就是說,如果Maven從遠程倉庫下載了最新的SNAPSHOT發布包的話,那么最新的待時間戳的包和xxx-SNAPSHOT包是完全一樣的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM