【问题标题】:maven deploy:deploy-file fails (409 Conflict), yet artifact uploads successfullymaven deploy:deploy-file 失败(409 Conflict),但工件上传成功
【发布时间】:2012-09-25 22:23:47
【问题描述】:

注意:

我现在意识到 jar 已放入我的存储库,但 pom.xml 没有。现在,我有另一个项目,其中 pom.xml 无法提升,但 jar 被放置在存储库中。

但是,另一个项目,pom.xml 和 jar 都被放置在存储库中。


我在 Jenkins 有一个项目,我使用提升插件通过 deploy:deploy-file 目标在 Maven 中部署我的工件。

这适用于我在 Maven 中拥有的其他几个项目,但对于这个项目却失败了。有趣的是文件(但不是 pom.xml)无论如何都会上传。我已经通过从我们的 Maven 存储库中删除工件,然后运行促销来验证这一点。升级后工件在我们的存储库中。

这是我得到的日志。尽我所能打破超长的线条:

[workspace] $ /bin/bash -xe /opt/tomcat/apache-tomcat-7.0.27/temp/hudson7357923598740079329.sh
+ FILE_LOC=/mnt/jenkins/builds/metricsdb-trunk/21/archive/target/archive
+ mvn deploy:deploy-file
    -Dversion=0.8.0
    -Dfile=/mnt/jenkins/builds/metricsdb-trunk/21/archive/target/archive/metricsdb-etl.jar
    -DpomFile=/mnt/jenkins/builds/metricsdb-trunk/21/archive/target/archive/pom.xml
    -Durl=http://repo.vegicorp.com/artifactory/ext-release-local -DrepositoryId=VegiCorp
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building Command Line Spring Batch Module 0.8.0.CI-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy-file (default-cli) @ metricsdb-etl ---
Uploading: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.jar
2/38 KB   
4/38 KB   
[...]

Uploaded: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.jar (38 KB at 202.2 KB/sec)
Uploading: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.pom
2/7 KB     
4/7 KB   
[...]

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.243s
[INFO] Finished at: Thu Oct 04 14:38:52 CDT 2012
[INFO] Final Memory: 4M/119M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy-file
    (default-cli) on project metricsdb-etl: Failed to deploy artifacts:
    Could not transfer artifact com.vegicorp.batch.metricsdb:metricsdb-etl:pom:0.8.0 from/to
    VegiCorp (http://repo.vegicorp.com/artifactory/ext-release-local):
    Failed to transfer file: http://repo.vegicorp.com/artifactory/ext-release-local/com/vegicorp/batch/metricsdb/metricsdb-etl/0.8.0/metricsdb-etl-0.8.0.pom.
    Return code is: 409, ReasonPhrase:Conflict. -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
failed build hudson.tasks.Shell@24a6e7f9 SUCCESS
Finished: FAILURE

带有调试标志 (-X) 的输出位于 Pastebin

【问题讨论】:

  • 我认为在 Artifactory 邮件列表中提出这个问题会更好(我假设您正在使用这个存储库管理器)。我认为它与它有关,而不是 Maven 本身。
  • 您是否尝试过使用-X 来查看调试跟踪是否有用?请注意,简短的搜索建议让 Jenkins 识别此 might be challenging
  • @DuncanJones 我确实使用-X 标志运行它。我把输出放在Pastebin

标签: maven deployment


【解决方案1】:

我发现了问题。实际上有两个问题:

  • 我只有发布存储库设置,并且我试图在发布存储库中保存快照发布。 Artifactory 设置为仅允许发布存储库中的发布。这可以在 Artifactory 设置中修改,但我决定不这样做。

  • 我的pom.xml 中的版本与我尝试保存的版本不同。例如,pom.xml 表示版本 2.0,我试图将版本保存为 2.0.2。出于这个原因,Artifactory 拒绝了 pom(但不是 jar)。

我找到了询问是否“禁止 POM 一致性检查”的 Artifactory 设置(针对每个存储库)。选中此框将允许我将版本设置为一个,但让 pom 说另一个。

我还必须修改我的 Maven“settings.xml”文件以允许发布和快照存储库。我还必须修改快照存储库的 URL。

我们只使用了一段时间的 Ivy(它没有 snapshot 的概念),所以我们只是将一些东西放在发布存储库中。这是一个 Maven 项目,开发者在 POM 中将版本标记为 SNAPSHOT。

不幸的是,Maven 文档很差,而且仍然没有任何关于 Maven 的好书。更糟糕的是,错误消息简直太糟糕了。 “409, ReasonPhrase:Conflict.-> [Help 1]”是什么意思?

并不是说 Ivy 文档要好得多,但 Ant in Action 有一些关于使用 Ivy 的优秀部分。

【讨论】:

  • 以防将来对某人有所帮助。在组 ID 中创建错字后,我收到了 409 错误:尾随点。把我逼疯了。所以有多种可能的原因。
  • 我猜糟糕的文档是商业模式的一部分;-) 是的。如果您想更深入地研究该项目,我完全可以确认文档非常差!
  • 我与 groupId 发生冲突。你的回答帮助我找到这个。谢谢。
  • 我遇到了一个关于包含 <artifactId>goose_${scala.version}</artifactId> 之类的属性的 artifactId 的问题。很可能存在上传路径与上传的 pom.xml 中的值一致的验证。
  • @MarkPhillips 你是冠军!用你的一个衬垫,你解决了我很多头/心痛!干杯人!
【解决方案2】:

我也遇到了这个问题,我发现原因是父项目没有部署在快照存储库中。 我在父文件夹中运行 mvn deploy,问题解决了。

【讨论】:

    【解决方案3】:

    是的....同一错误的多个原因。也许它会帮助某人

    1. Login as Admin to Artifactory
    2. Configuration -> Repositories
    3. Edit the Local Repository ---> Suppress POM Consistency Checks
    

    这解决了我的问题....不确定。方法对不对?

    【讨论】:

    • 检查pom.xml 文件中的版本以确保该版本是您想要的版本。如果是的话,我就不用担心了。
    【解决方案4】:

    我也遇到了同样的问题。 (TL;DR:解决方案见最后一行)

    在从 jenkins 部署到 Artifactory 期间,有时(很神奇!)会出现 409 - 冲突错误,并在 Artifactory 日志中显示以下错误消息:

    [WARN] (oaeUploadServiceImpl:239) - 发送 HTTP 错误代码 409:校验和策略 'LocalRepoChecksumPolicy: CLIENT' 拒绝了工件 'gradle-integration:com.redacted.java/fooProject/123/foo-123.jar' .校验信息:ChecksumsInfo {校验= {SHA-1 = ChecksumInfo {类型= SHA-1,原始= 'da39a3ee5e6b4b0d3255bfef95601890afd80709',实际= '1459689f0be058f4ecef7e6fe3576f1550a8afda'},MD5 = ChecksumInfo {类型= MD5,原始= 'd41d8cd98f00b204e9800998ecf8427e',实际=” 14c7a498de028d6eb5882b3c698bc456'}}}。

    训练有素的眼睛可能会注意到:MD5# d41d8cd98f00b204e9800998ecf8427e 是空文件或字符串的校验和。

    这意味着必须发生以下情况: 在发布文件夹中准备工件的复制作业尚未完成,因此在计算校验和时文件为空。

    然而,当部署发生时,文件在那里,Artifactory 现在收到一个不正确的校验和,并正确拒绝该文件,错误代码为 409。

    解决方案(很简单): 在开始部署作业之前确保 100% 的文件确实存在(添加暂停或适当的逻辑)。

    【讨论】:

      【解决方案5】:

      如果您要发布到 snapshot 存储库,请确保将 -SNAPSHOT 作为您的版本的一部分。

      并删除 -SNAPSHOT,以防您将其发布到非快照存储库。

      【讨论】:

      • 这应该是评论,而不是答案。多一点代表,you will be able to post comments。在此之前,请不要使用答案作为解决方法。
      • 感谢您的建议。很高兴我的答案被删除,但我认为这些信息增加了关于此类错误的知识体系。我确实尝试添加评论,但正如您所指出的,我没有足够的代表。在寻找解决我自己的问题时,我搜索了 artifactory 和 409,这是唯一的 stackoverflow 答案。将有关 409 的信息保存在一个地方会更好,还是我应该提出并回答自己的问题?
      • 如果它在任何重要方面是一个不同的问题,请将其发布(并继续并自行回答),但要明确它与问题本身的不同之处。 SO 对于问题空间并不难,因此所有完全独立的问题都应该单独提出,只要它们被明确区分即可。
      【解决方案6】:

      在我的情况下,与 jar 文件(外部,在同一目录中)关联的 POM 文件对其自身具有依赖性。这是来自第三方的离线压缩仓库,我需要加载到工件中。

      我修改了 POM 文件,删除了自依赖并确保包信息正确。然后工件部署没有问题。向供应商发送电子邮件,以便他们在构建中进行修复。

      【讨论】:

        【解决方案7】:

        也有那个错误信息。对我来说,问题是服务器的设置是只接受发布,而不是快照。从 pom 中删除 SNAPSHOT 后,它工作正常。

        【讨论】:

          【解决方案8】:

          您的远程仓库空间很可能已满。在进行所有技术和浪费时间之前验证这一点。浪费了 2-3 小时认为这是一个逻辑问题。

          【讨论】:

            【解决方案9】:

            我也遇到了这个问题,结果发现我们在我尝试部署到的存储库上设置了包含/排除规则,而我的部署与这些规则不匹配。

            我的解决方案是将部署指向以 **/* 作为包含规则的新存储库(以及来自我的其他存储库的模式作为排除规则以保持它们分开)。

            【讨论】:

              猜你喜欢
              • 2021-04-13
              • 1970-01-01
              • 2011-11-21
              • 1970-01-01
              • 2021-11-19
              • 1970-01-01
              • 2021-07-05
              • 2011-03-09
              • 1970-01-01
              相关资源
              最近更新 更多