如何在Azure Artifacts中更新具有相同版本号的Maven依赖项

时间:2019-03-01 03:47:54

标签: azure-devops azure-artifacts

我们将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工件中做到这一点?

2 个答案:

答案 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