8

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

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

有人对另一个目录布局有解决方案或建议吗?

4

2 回答 2

11

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

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

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

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

您应该从已部署文件中省略内部版本号并使用“ build.timestamp ”矩阵参数部署它(以使 Artifactory 在每次新部署时都成为“批次”)或使用唯一快照部署文件。

于 2012-03-28T13:07:09.923 回答
0

我发布了这个解决方案:https : //discuss.gradle.org/t/2-8-2-9-mavendeployer-doesnt-honour-uniqueversion-false-in-maven-uploadarchives/13370/8 我遇到的问题是多个出版部分的出版物。我的解决方案是将额外的工件添加到一个出版物中。然后所有的项目,api jar、source jar、api source jar 和 main 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"
            }
        }
    }
}
于 2016-07-15T18:21:04.973 回答