在我们的工件中,我们定义了一个快照仓库来处理最多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,所以我们有一个文件列表,如:
任何人都有另一个目录布局的解决方案或建议吗?
答案 0 :(得分:10)
正如您所正确观察到的那样,您附加到已部署文件名的内部版本号被标识为分类器;这是因为Maven没有使用非唯一快照指定内部版本号。
Artifactory为工件的“批次”维护时间戳和内部版本号的相同组合,并在检测到新的“批次”时“碰撞”时间戳和内部版本号; Artifactory有两种方法可以检测工件“批次”,以便将非唯一快照转换为唯一快照:
工件按以下顺序部署:工件(无分类器),POM,附加工件(带分类器);在POM之后部署的第一个普通工件将创建一个新的“批处理”;因此提供了新的时间戳和建造者编号。
使用密钥“ build.timestamp ”的matrix param部署的工件和基于毫秒的纪元时间戳的值;具有相同时间戳值的工件将在相同的“批次”下关联。
您应该从已部署的文件中省略内部版本号,并使用“ 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"
}
}
}
}