Artifactory Snapshot文件名处理

时间:2012-03-22 10:00:28

标签: snapshot artifactory

在我们的工件中,我们定义了一个快照仓库来处理最多5个唯一快照。我们在文件名中添加了-SNAPSHOT-.extension。 SNAPSHOT也转换为时间戳。使用gradle完成构建,并使用bamboo和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,所以我们有一个文件列表,如:

  • 子项目-干线20120321.154621-1-79.amp
  • 子项目-干线20120321.154621-1-80.amp
  • 子项目-干线20120321.154621-1-81.amp

任何人都有另一个目录布局的解决方案或建议吗?

2 个答案:

答案 0 :(得分:10)

正如您所正确观察到的那样,您附加到已部署文件名的内部版本号被标识为分类器;这是因为Maven没有使用非唯一快照指定内部版本号。

Artifactory为工件的“批次”维护时间戳和内部版本号的相同组合,并在检测到新的“批次”时“碰撞”时间戳和内部版本号; Artifactory有两种方法可以检测工件“批次”,以便将非唯一快照转换为唯一快照:

  1. 工件按以下顺序部署:工件(无分类器),POM,附加工件(带分类器);在POM之后部署的第一个普通工件将创建一个新的“批处理”;因此提供了新的时间戳和建造者编号。

  2. 使用密钥“ build.timestamp ”的matrix param部署的工件和基于毫秒的纪元时间戳的值;具有相同时间戳值的工件将在相同的“批次”下关联。

  3. 您应该从已部署的文件中省略内部版本号,并使用“ build.timestamp ”矩阵参数进行部署(以使Artifactory在每个新部署中突破“批处理”)或部署文件已经包含唯一快照。

答案 1 :(得分: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"
            }
        }
    }
}