43

笔记:

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

4

9 回答 9

43

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

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

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

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

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

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

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

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

于 2012-10-05T19:49:32.810 回答
31

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

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

于 2015-04-22T01:57:25.997 回答
4

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

于 2013-12-11T09:48:24.270 回答
4

是的....相同错误的多个原因。可能会帮助某人

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

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

于 2014-10-30T11:53:28.667 回答
4

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

于 2018-10-22T08:28:44.153 回答
1

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

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

于 2019-04-11T19:39:52.530 回答
1

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

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

于 2017-02-28T19:47:44.287 回答
0

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

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

[警告] (oaeUploadServiceImpl:239) - 发送 HTTP 错误代码 409:校验和策略“LocalRepoChecksumPolicy:CLIENT”拒绝了工件“gradle-integration:com.redacted.java/fooProject/123/foo-123.jar”。Checksums info: 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% 的文件确实存在(添加暂停或适当的逻辑)。

于 2014-11-20T10:45:56.280 回答
0

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

于 2019-03-29T15:57:33.693 回答