9
[WARNING] The POM for org.testng:testng:jar:5.14.10 is invalid,
          transitive dependencies (if any) will not be available: 1 problem was
          encountered while building the effective model for
          org.testng:testng:5.14.10

[FATAL]   Non-readable POM
          /home/teamcity/.m2/repository/org/sonatype/oss/oss-parent/3/oss-parent-3.pom:
          input contained no data @
          /home/teamcity/.m2/repository/org/sonatype/oss/oss-parent/3/oss-parent-3.pom

损坏的文件发生在~/.m2,每个人都知道。修复它就像删除损坏的文件一样简单,因此 Maven 可以重新下载它。但是,我不想手动 grep 日志、连接到构建代理并手动删除这些文件。可靠的构建应该能够处理这些问题。

有什么方法可以让 Maven 重新下载损坏的文件而不是使构建失败?我不想~/.m2在每次构建执行之前删除,因为它会使构建变得非常慢。

为什么会这样?我的一位客户的基础设施损坏了。虚拟机经常在没有任何通知的情况下重新启动。而且由于大部分时间都在执行构建,因此文件在例如~/.m2. 在这件事上我没有什么可以改变的,这是他们的服务器和他们的政策——或者只是无能。但是我必须手动修复构建。

4

1 回答 1

4

就 Maven 3.0.4 而言,没有办法通过一次调用 maven 来解决这个问题。

你可以做的是编写一个聚合器插件,它逐步遍历反应器中的每个模块,并通过 API 调用(而不是 mojo 注释)解决它们的依赖关系,从而允许捕获故障并清除和重试。

它不会捕获所有情况(例如插件依赖项),但如果你做了类似的事情

$ mvn org.mine.maven:resolve-all:resolve-all || rm -rvf ~/.m2/repository
$ mvn clean verify

它会更可靠。

如果您很高兴需要 Maven 3.x,您可以编写一个构建扩展并将其放入$MAVEN_HOME/lib,构建扩展可以执行与插件相同的技巧,但由于它在插件解析之前发挥作用,它可以捕获插件的情况.

很多工作,就个人而言,一个好的 MRM 使重新下载变得愚蠢快速,在使用 Maven 的 8 年中,我可能有 3-4 次本地 repo 腐败......播放和元数据(pom)从一个解决,而工件来自另一个......只有一种情况是“错误下载的HTML”......所有这些都将被MRM阻止

于 2013-01-19T11:21:51.990 回答