Maven进程测试资源



我有一个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来更新类。如果你可以跳过一个缓慢的动作,你也会得到一个加速。

最新更新