我们将maven专用存储库Nexus更改为Azure Artifacts。 当我们上传带有某个版本的私有Maven依赖项时,它会在下面的信息中告诉我们:
[错误]无法执行目标 org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (默认部署)在项目HmapBasic上:无法部署工件: 无法传输工件com.hand:HmapBasic:pom:3.0.3-RELEASE 从/到dev-azure-com-kohlerdevops-konnect统一 (https://pkgs.dev.azure.com/KohlerDevOps/_packaging/Konnect-Unified/maven/v1/): 传输文件失败: https://pkgs.dev.azure.com/KohlerDevOps/_packaging/Konnect-Unified/maven/v1/com/hand/HmapBasic/3.0.3-RELEASE/HmapBasic-3.0.3-RELEASE.pom。 返回码是:409
我搜索了代码409错误。这意味着我们已经使用该版本上载了依赖项,因此无法再次上载。 我们希望使用新的依赖项覆盖旧的依赖项而不更改版本(因为如果更改版本,我们所有的项目都需要更改pom.xml)
我们如何在Azure工件中做到这一点?
答案 0 :(得分:0)
如何在Azure Artifacts中更新具有相同版本号的Maven依赖项
恐怕您必须更改pom.xml,我知道这对您来说是多么令人沮丧。但这就是Azure Artifacts故意设计的,以确保生成结果的正确性。
检查文档:Understand immutability of packages.
将特定版本的软件包发布到Feed后, 版本号是永久保留的。您不能上传较新的 具有相同版本号的修订包,或将其删除并 上传相同版本的新软件包。
设计的原因:
因为许多软件包客户端(包括NuGet)都保留本地缓存 机器上的软件包数量。客户端缓存了特定内容后 package @ version,它将在以后的安装/恢复时返回该副本 要求。如果在服务器上,将package @ version(rev 1)替换为 一个新的package @ version(rev 2),客户端无法告知 区别。客户端仍在缓存中使用旧版本。这可能导致不确定的生成结果 不同的机器。
所以我们不能覆盖所有已经被打包的软件包 即使我们无法删除它们并重新上传。解决 此问题,唯一的方法是使用新的 版本。
查看我的another thread,了解更多信息。
希望这会有所帮助。
答案 1 :(得分:0)
我刚刚在Azure DevOps上进行了测试,如果您使用“ SNAPSHOT”后缀,它将覆盖以前的程序包/工件。例如2.0.0-SNAPSHOT
。