我有一个maven项目,它的测试范围依赖于一个工件。但是由于某些原因,工件在我运行这个项目的新环境中不可用。所以process-test-resources步骤失败了,因为maven找不到要复制的工件。
有没有人知道当没有找到测试工件时,如何防止maven构建失败?或者修改步骤以排除该工件?我使用-DskipTests=true标志,所以在我看来,这个测试范围依赖工件不应该重要。
提前感谢!
您可以修改pom,使其不再具有测试范围依赖关系,并删除任何需要它的东西,或者只是找到工件。
您可以尝试将您的选项更改为-Dmaven.test.skip=true
,但文档没有提到显式跳过测试资源管理:参见http://maven.apache.org/plugins/maven-surefire-plugin/examples/skipping-test.html
如果您有一个可用的工件文件,您可以尝试将它手动安装到您的本地存储库中。
这是直接从maven-install-plugin文档
mvn install:install-file -Dfile=path-to-your-artifact-jar
-DgroupId=your.groupId
-DartifactId=your-artifactId
-Dversion=version
-Dpackaging=jar
-DlocalRepositoryPath=path-to-specific-local-repo
我不建议将此作为通用解决方案,但在您解决环境问题之前,它将有效。
假设测试必须成功,构建才能成功。您可以跳过测试,但是让构建仅仅因为无法运行测试就自动跳过测试似乎很危险——至少这是理论上的,这也解释了为什么您在maven中尝试做的事情并不容易。
我从来没有这样做过,但是您可能能够通过有条件构建来解决问题,并且仅在依赖项可用时激活测试生命周期:
<profiles>
<profile>
<activation>
<-- something relying on dependency presence/absence? -->
</activation>
<skipTests>true</skipTests>
</profile>
</profiles>
我找不到一种简单的方法来激活依赖项,所以你可能不得不使用基于文件的激活(ew....) -这反过来可能需要一个"假"项目来尝试为你下载dep(使dep可选)。
如果在该上下文中skipTests不起作用,并且您需要基于配置文件构建,则可能会变得更复杂。
如果它变得足够丑陋,我要做的就是把项目分成两个(jar/tests)——这样扭曲的逻辑就不会"污染"主项目——测试项目中令人讨厌的东西(antrun是你的朋友!)并没有那么糟糕,因为该项目最终不会产生其他依赖的任何东西。
使用-Dmaven.test。skip=true将为您提供所需的大部分内容。然后它取决于你要处理你的测试资源的插件。
我发现其他一些插件也允许您跳过它们的操作,然后您可以重用maven.test.skip
中的属性值。例如:http://mojo.codehaus.org/exec-maven-plugin/exec-mojo.html
这有一个跳过配置。对该执行的配置进行以下更改将跳过该操作。
<configuration>
...
<skip>${maven.test.skip}</skip>
</configuration>
这个问题可能是2011年的问题,但我希望下一个人会觉得它有用。
这对于像eclipse这样的开发环境非常有用,它在每次编译时使用mvn来更新类。如果你可以跳过一个缓慢的动作,你也会得到一个加速。