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

4
我们将我们的Maven私有仓库Nexus更改为Azure Artifacts。当我们上传一个带有某个版本的私有Maven依赖项时,它会告诉我们以下信息:

[错误] 无法执行目标 org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) 在项目 HmapBasic 上: 无法部署构件: 无法传输构件 com.hand:HmapBasic:pom:3.0.3-RELEASE 从/到 dev-azure-com-kohlerdevops-konnect-unified (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 Artifacts中,我们该如何做到这一点?
2个回答

3

我刚在Azure DevOps上做了一次测试,如果你使用“SNAPSHOT”后缀,它会覆盖先前的包/构件。例如2.0.0-SNAPSHOT


3
在Azure Artifacts中如何使用相同版本号更新maven依赖项
很抱歉,您必须更改pom.xml。我了解这对您来说非常令人沮丧。但这是Azure Artifacts特意设计的,以确保构建结果的正确性。
请查看文档:了解包的不变性。 一旦将特定版本的软件包发布到Feed中,该版本号将被永久保留。您不能上传具有相同版本号的新修订软件包,也不能删除它并上传具有相同版本的新软件包。
这种设计的原因是:
由于许多软件包客户端(包括NuGet)在计算机上缓存软件包,因此无论将来安装/还原请求多少次,一旦客户端缓存了特定的package@version,它就会返回该副本。如果在服务器上用新的package@version(rev 2)替换package@version(rev 1),客户端无法区分差异。客户端仍然使用缓存中的旧版本。这可能导致不同机器之间的不确定构建结果。
因此,我们无法覆盖已经上传的所有软件包,甚至无法删除它们并重新上传。为解决此问题,唯一的方法就是使用新版本上传软件包。
请查看我的另一个线程获取更多信息。
希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接