2012-03-22 87 views
5

在我們的artifactory中,我們有一個快照回購定義來處理最多5個獨特的快照。我們爲文件名添加了-SNAPSHOT-.extension。 SNAPSHOT也轉換爲時間戳。構建是用gradle完成的,並且神器用竹子和artifactory插件發佈。Artifactory快照文件名處理

部署到artifactory的一個文件...

inhouse-snapshots:com/example/project/subproject/trunk-SNAPSHOT/subproject-trunk-SNAPSHOT-79.amp 

成爲...

inhouse-snapshots:com/example/project/subproject/trunk-SNAPSHOT/subproject-trunk-20120321.154621-1-79.amp 

這是很好,每次構建增加與增加版本號的新文件,但時間戳數始終保持20120321.154621-1所以我們有一個文件列表,像這樣:

  • subproject-trunk-20120321.154621-1-79.amp
  • 子項目-幹線20120321.154621-1-80.amp
  • 子項目-幹線20120321.154621-1-81.amp

任何人具有針對另一個目錄的佈局中的溶液或建議?

+0

此快照時間戳替換不應發生在Artifactory中。 Artifactory僅使用默認的Maven佈局替換存儲庫中部署到有效Maven標準路徑(此示例無效)的工件快照。您的存儲庫配置使用哪種佈局?你自己進行替換嗎? – noamt 2012-03-25 15:56:47

+0

存儲庫佈局是maven2default,我沒有執行快照替換。我在artifactory管理控制檯中使用路徑測試器測試了上面的路徑,幾乎所有事情都很好,因爲期望內部版本號79,80 ......被識別爲分類器。我不確定這是否正確。我也測試它沒有內部編號,在這種情況下,工件將被覆蓋。在那裏,我期望第二個文件帶有新的時間戳和-2 ...在時間戳結尾 – 2012-03-28 12:04:43

+0

哦,我剛剛認識到我的錯字導致無效的maven2路徑,修復它。對不起 – 2012-03-28 12:07:14

回答

9

正如您已經正確觀察到的,您附加到部署的文件名的內部版本號被標識爲分類器;這是因爲Maven沒有指定具有非唯一快照的內部版本號。

Artifactory爲工件的「批次」保留相同的時間戳和內部編號組合,並在檢測到新的「批次」時「碰撞」時間戳和內部編號;有2種方式,其中Artifactory的檢測工件「分批」用於轉換的目的非唯一獨特的快照:

  1. 工件被部署在的確切順序:僞像(不分級),POM,附接的工件(帶分類器);在POM之後部署的第一個普通工件將創建一個新的「批次」;因此提供了新的時間戳和構建器編號。

  2. 工件部署與鍵「build.timestamp」和基於毫秒曆元時間標記值的matrix param;具有相同時間戳值的工件將在相同的「批次」下關聯。

您應該從部署文件中省略了版本號,並用「build.timestamp」矩陣PARAM部署(使Artifactory的撞擊在每一個新的部署「批量」)或部署文件已經擁有獨特的快照。

+1

是的,thx。使用唯一時間戳而不是SNAPSHOT部署文件使自動快照清理工作。 – 2012-03-29 09:10:47

0

我發佈了這個解決方案:https://discuss.gradle.org/t/2-8-2-9-mavendeployer-doesnt-honour-uniqueversion-false-in-maven-uploadarchives/13370/8 我遇到的問題是發佈部分有多個出版物。對我來說,解決方案是將額外的工件添加到一個出版物中。然後,所有的項目,api jar,源jar,api源jar和主jar都有一個SNAPSHOT的相同時間戳。這似乎爲我自動照顧build.timestamp。

task apiJar(type: Jar) { 
    classifier = 'api' 
    from(sourceSets.main.output) { 
     include "com/company/app/dto/**" 
    } 
} 

task sourceJar(type: Jar, dependsOn: classes) { 
    classifier = 'sources' 
    from sourceSets.main.allSource 
} 

task apiSourceJar(type: Jar, dependsOn: classes) { 
    classifier = 'api-sources' 
    from(sourceSets.main.allSource) { 
     include "com/company/app/dto/**" 
    } 
} 

publishing { 
    publications { 
     mavenJava(MavenPublication) { 
      from components.java 
      pom.withXml { 
       asNode().appendNode('description', 'APP Sprint Boot App') 
      } 
      artifact apiJar 
      artifact sourceJar 
      artifact apiSourceJar 
     } 
    } 
    repositories { 
     maven { 
      credentials { 
       username = 'username' 
       password = 'password' 
      } 
      if(project.version.endsWith('-SNAPSHOT')) { 
       url "http://server:9081/artifactory/libs-snapshot-local" 
      } else { 
       url "http://server:9081/artifactory/libs-release-local" 
      } 
     } 
    } 
}