2012-03-22 63 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" 
      } 
     } 
    } 
}