Maven 3是否可以重新下载损坏的文件,而不是使构建失败?
损坏的文件发生在Maven 3是否可以重新下载损坏的文件,而不是使构建失败?,maven,continuous-integration,maven-3,Maven,Continuous Integration,Maven 3,损坏的文件发生在~/.m2中,每个人都知道这一点。修复它就像删除损坏的文件一样简单,这样Maven就可以重新下载它。但是,我不想手动grep日志,连接到构建代理并手动删除这些文件。可靠的构建应该能够处理此类问题 有没有办法让Maven重新下载损坏的文件,而不是让构建失败?我不想在执行每个构建之前删除~/.m2,因为这会使构建非常缓慢。 为什么会这样?我的一个客户的基础设施坏了。虚拟机经常在没有任何通知的情况下重新启动。而且由于构建大部分时间都在执行,因此文件会在以下情况下损坏:例如,~/.m2。
~/.m2
中,每个人都知道这一点。修复它就像删除损坏的文件一样简单,这样Maven就可以重新下载它。但是,我不想手动grep日志,连接到构建代理并手动删除这些文件。可靠的构建应该能够处理此类问题
有没有办法让Maven重新下载损坏的文件,而不是让构建失败?我不想在执行每个构建之前删除~/.m2
,因为这会使构建非常缓慢。
为什么会这样?我的一个客户的基础设施坏了。虚拟机经常在没有任何通知的情况下重新启动。而且由于构建大部分时间都在执行,因此文件会在以下情况下损坏:例如,
~/.m2
。在这件事上,我没有什么可以改变的,那就是他们的服务器和他们的政策——或者只是无能。但是我必须手工修复构建。到Maven 3.0.4为止,一次调用Maven就无法解决这个问题
您可以编写一个聚合器插件,逐步遍历反应器中的每个模块,并通过API调用(而不是mojo注释)解析它们的依赖关系,从而捕获故障并清除并重试
它不会捕获所有情况(例如插件依赖项),但如果您执行类似的操作
[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
这样会更可靠
如果您愿意要求Maven 3.x,您可以编写一个构建扩展并将其放入$Maven_HOME/lib
中,构建扩展可以执行与插件相同的技巧,但因为它在插件解析之前就已经开始使用,所以它可以捕获插件的情况
大量的工作,就个人而言,一个好的MRM使重做速度很快,而且在使用Maven的8年中,我可能已经发生了3-4次本地回购腐败。。。在这些时间里,我有多个存储库,元数据(pom)从一个存储库中解析,而工件从另一个存储库中解析。。。只有一个案例是“错误下载HTML”。。。所有这些都会被MRM阻止这种情况经常发生吗?在我的实践中,虽然我每天在几个不同的项目上使用maven,但我只需要做几次。但拥有可靠的构建总是更好的,这样您就不需要直接接触构建代理。拥有自己的存储库管理器并确保所有工件(及其pom文件)都处于良好状态更好,因此即使您在新机器上启动构建,您也会得到预期的结果。但回到你的问题,我不知道有任何插件可以做到这一点。请尝试
mvn依赖项:清除本地存储库,更多详细信息请参见。你可以教构建代理“grep日志并删除这些文件”。这取决于代理的可配置程度。我使用,它很好地解决了这类问题,允许在maven构建之后运行自定义脚本。谢谢。我认为这种resolve all | | rm-rf
方式已经足够好了。或者可以通过resolve all | | purge local repository
进行改进,因为它可以保存当前构建的项目中未引用的工件。仅供参考:我添加了一个说明,说明了为什么损坏的文件在这里很常见。
$ mvn org.mine.maven:resolve-all:resolve-all || rm -rvf ~/.m2/repository
$ mvn clean verify