maven deploy:deploy-file失败(409 Conflict),但工件上传成功

时间:2012-10-04 19:49:40

标签: maven deployment

  

注意:

     

我现在意识到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

9 个答案:

答案 0 :(得分:33)

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

  • 我只设置了发布存储库,我试图在发布存储库中保存快照发布。 Artifactory设置为仅允许发布存储库中的发行版。这可以在Artifactory设置中修改,但我决定反对。

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

我发现Artifactory设置(每个存储库)询问是否“抑制POM一致性检查”。选中此框将允许我将版本设置为1,但让pom说另一个。

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

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

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

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

答案 1 :(得分:20)

如果要发布到快照存储库,请确保将-SNAPSHOT作为版本的一部分包含在内。

答案 2 :(得分:4)

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

答案 3 :(得分:4)

是啊......同样错误的多重原因。可能它会帮助某人

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

这解决了我的问题....不确定。是否正确?

答案 4 :(得分:2)

也有该错误消息。对我而言,问题在于服务器的设置仅接受发行版,而不接受SNAPSHOT。从pom中删除SNAPSHOT后,它工作正常。

答案 5 :(得分:1)

在我的例子中,与jar文件相关联的POM文件(外部,在同一个dir中)对自身有依赖性。这是来自第三方的离线压缩回购,我需要加载到神器中。

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

答案 6 :(得分:1)

我也遇到了这个问题,事实证明,我们在要部署到的存储库中设置了包含/排除规则,而我的部署与这些规则不匹配。

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

答案 7 :(得分:0)

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

在从jenkins部署到Artifactory的过程中,有时(魔术!)出现409 - 冲突错误,并在Artifactory日志中显示以下错误消息:

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

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

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

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

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

答案 8 :(得分:0)

远程仓库中的空间很可能已满。在进行所有技术和浪费时间之前,请先进行验证。浪费了2-3个小时来思考这是一个逻辑问题。