我们有一组文件,我们希望专门部署到artifactory,测试结果.符合以下模式的文件似乎始终如一409 rejected the resolution of an artifact due to conflict in the snapshot release handling policy.该文件遵循格式abcxyz-test-results.json.我们有其他结果文件只是test-results.json上传就好了.值得注意的是,在遇到409之前,所有其他工件都会成功上传.
我们的存储库使用maven-2-default存储库布局.包含正则表达式设置为**/*,我们不定义任何排除.我的下一步是增加Artifactory在遇到此错误时产生的日志记录的详细程度,但我不确定这是否会有成效.
关于我们违反此文件的快照处理策略,我感到很遗憾.关于我可以采取什么样的调试步骤,或者实际的冲突可能是什么的任何想法将不胜感激.
对于未来偶然发现这个问题的读者。
和神奇的短语
由于快照发布处理策略冲突
如果您要发布到简单版本,很可能是这样的:
String repoKeyValue = version.endsWith('SNAPSHOT') ? 'libs-snapshot-local' : 'libs-release-local'
Run Code Online (Sandbox Code Playgroud)
那么您可能不会收到此错误。
但是,如果您尝试发布到公司范围内的全面工件实现,则可能会发布到看起来更像这样的东西:
String repoKeyValue = version.contains('SNAPSHOT') ? 'MyCustomRepository-Snapshots/com/mycompany/mypackagename1/mypackagename2/' : 'MyCustomRepository-Releases/com/mycompany/mypackagename1/mypackagename2/'
Run Code Online (Sandbox Code Playgroud)
那么问题出在哪里呢?
当您使用此(就在下面)配置进行发布时(本问题后面的配置的完整上下文:
publishBuildInfo = true
publishPom = true
Run Code Online (Sandbox Code Playgroud)
Artifactory 正在检查..以确保 .pom 的内容与您的整体发布路径名称一致。
黑客修复:(紧邻代码下方)
publishBuildInfo = false
publishPom = false
Run Code Online (Sandbox Code Playgroud)
真正的解决方法是协调您的 com.mycompany.mypackage......blah.blah.blah 名称,以便正确通过人工命名一致性检查。
The repository 'MyCustomRepository-Snapshots' rejected the resolution of an artifact 'MyCustomRepository-Snapshots:com/mycompany/mypackagenameNotQuiteRight999/myPackageNameNotQuiteRight888/my-thing-impl/1.0.60-SNAPSHOT-1601111703114/my-thing-impl-1.0.60-SNAPSHOT-1601111703114.jar'
due to conflict in the snapshot release handling policy. Status code: 409
Run Code Online (Sandbox Code Playgroud)
因此,如果您尝试发布到(请参阅上面的变量 repoKeyValue ),您将收到上述错误
'MyCustomRepository-Snapshots/com/mycompany/mypackagename1/mypackagename2/'
因为(这是要理解的关键)...“com/mycompany/mypackagename1/mypackagename2/”和“com/mycompany/mypackagenameNotQuiteRight999/myPackageNameNotQuiteRight888/”之间存在差异
上面这句话是理解故障排除的关键思想。
Artifactory(当你将publishPom和publishBuildInfo设置为true时)检查一致性......(据我所知)
以下是魔法属性的更全面的背景。请注意,我有一个多模块 gradle 项目,我不想发布根项目。#monolithsAreHorrible
(下面是我的根 build.gradle 文件)
artifactoryPublish.skip = true
artifactory {
contextUrl = "${artifactory_url}"
publish {
repository {
repoKey = "${repoKeyValue}"
username = "${artifactory_user}"
password = "${artifactory_password}"
}
defaults {
publications('myPublicationNameOne', 'myPublicationNameTwo', 'myPublicationNameThree')
publishArtifacts = true
publishBuildInfo = true
publishPom = true
}
}
}
Run Code Online (Sandbox Code Playgroud)
下面是我的模块 build.gradle 文件之一(它们看起来都一样)。
我发现我保持出版物越简单(例如:“myPublicationNameOne”),当我让一切以协调的方式工作时,我就越理智。
// the "name" variable inside the publications/myPublicationName block is getting overwritten. so create a variable here to capture the name (as the artifactid)
def artifactIdForPublicationBlockHolder = "${name}"
dependencies {
testImplementation group: 'junit', name: 'junit', version: junitVersion
}
println("hey.there.myPublicationNameOne")
println("group=${group}")
println("version=${version}")
println("artifactId=${name}")
publishing {
publications {
myPublicationNameOne(MavenPublication) {
// groupId, artifactId and version have defaults, so do not arbitrarily override : https://docs.gradle.org/current/userguide/publishing_maven.html#publishing_maven:publications
artifact "./build/libs/${artifactIdForPublicationBlockHolder}-${version}.jar"
}
}
}
Run Code Online (Sandbox Code Playgroud)
奖励材料:
有关publicationNames,请参阅https://docs.gradle.org/current/dsl/org.gradle.api.publish.maven.MavenPublication.html (如果您是第一次学习者,使用publicationName(s)关键字的人把我扔了关闭一段时间)
带有工件的“gradle.settings”:
artifactId 上的时间戳
调试提示:
有目的地将您的目标工件设置为:
String repoKeyValue = version.endsWith('SNAPSHOT') ? 'doesnotexist-libs-snapshot-local' : 'doesnotexist-libs-release-local'
Run Code Online (Sandbox Code Playgroud)
(会失败,不过暂时没问题)
并尝试在本地运行神器推送:
在 gradle 中它是(或者可能基于您的设置):
./gradlew clean build artifactoryPublish
Run Code Online (Sandbox Code Playgroud)
这至少会告诉你它试图“推动”什么。
你会看到这样的失败:
[pool-1-thread-1] Deploying artifact: https://somewhere.com/artifactory/MY-Snapshots/com/mycompany/mypackagenameNotQuiteRight999/myPackageNameNotQuiteRight888/1.0-SNAPSHOT/myPackageNameNotQuiteRight888-1.0-SNAPSHOT.jar
Failed to upload file
Run Code Online (Sandbox Code Playgroud)
但它向您展示了它试图“推动”的内容,您可以从那里进行协调。