无法使用Maven部署工件,错误代码409

时间:2019-12-02 07:26:38

标签: maven jar azure-devops artifact maven-deploy-plugin

我正在使用azure devops,并尝试使用maven构建代码并上传,但是我收到以下错误消息。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file 
(default-cli) on project ojdbc7: 

com.huber.abc:ojdbc7:jar:2.0 from
to dev-azure-com-abc-devops-abc-artifacts (https://pkgs.dev.azure.com/ABC-DevOps/_packaging/abc- 
Artifacts/maven/v1):

Failed to transfer file 

https://pkgs.dev.azure.com/abc-DevOps/_packaging/abc- 
Artifacts/maven/v1/com/huber/abc/ojdbc7/2.0/ojdbc7-2.0.jar with status code 409 -> [Help 1]Failed to 
deploy artifacts: 

Could not transfer artifact

我发现了一个类似问题的问题thread。根据该链接,不使用快照,而使用发布。因此,我在这里添加pom.xml文件作为参考。

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.myorg.abc</groupId>
  <artifactId>ojdbc7</artifactId>
  <version>2.0</version>
</project>

我不知道如何解决此问题。我已经看到许多版本的错误409。但是看来我的问题有所不同,请指导我。

2 个答案:

答案 0 :(得分:0)

这不是一个完整的答案,但可能会有所帮助。 我是Azure Dev Ops和Maven的新手,因此请原谅并更正注释中的任何错误。 我已经重复了一些事情,OP知道这些事情可以使其他人更清楚。

Maven允许您部署两种工件:

  1. 快照

    • 快照是软件包的开发版本。
    • 快照的后缀为-SNAPSHOT。例如。 1.2.0-快照
    • 快照是可变的。部署操作可以用新版本替换SNAPSHOT (更多最新的开发版本可以替代开发版本)
  2. 释放

    • 任何未以后缀-SNAPSHOT结尾的版本均视为发行版本。
    • 发布是一成不变的。如果已将发行版部署到存储库,则部署操作将失败。

409 = Resource Conflict

这可能意味着

  • 该工件已经发布,无法覆盖

  • 无法发布工件,因为它的类型错误。 例如,将发布发布到仅接受快照的存储库 或将快照发布到仅接受版本的存储库中

另请参阅:How to update a maven dependency with a same version number in Azure Artifacts(您不能发布)

我不确定如何告诉Maven如果工件已经存在,则部署失败是可以的。 (在Linux中)明显和错误的黑客攻击是:

mvn deploy || /bin/true

我不确定Azure中的等效项是什么,或者不确定是否有maven选项使其表现为这种方式。 这种黑客行为很糟糕,因为如果由于其他原因失败,它将报告部署步骤成功。

有一个插件https://github.com/chonton/exists-maven-plugin,它可以参见https://stackoverflow.com/a/53623937/1569204。同样,我不确定如何在Azure上启用它。

我以separate question of my own的身份要求

答案 1 :(得分:0)

在Azure Devops中,在工件存储源中的you cannot reuse version numbers。例如,如果您已经部署了v2.0,并将其从feed中删除,则在以后的任何时候尝试重新部署具有相同名称的v2.0工件时,都会收到HTTP 409错误