故障安全插件不会在一个项目上运行,但会在另一个项目上运行——为啥?
Posted
技术标签:
【中文标题】故障安全插件不会在一个项目上运行,但会在另一个项目上运行——为啥?【英文标题】:failsafe plugin won't run on one project but will run on another -- why?故障安全插件不会在一个项目上运行,但会在另一个项目上运行——为什么? 【发布时间】:2012-04-14 10:01:23 【问题描述】:这让我发疯了。 Maven 故障保护插件不会在我的项目上运行。如果我运行mvn verify
,则只有肯定会运行。如果我输入 mvn failsafe:verify
它会失败并出现以下错误:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Simulation Experiment Server 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-failsafe-plugin:2.11:verify (default-cli) @ experiment-server ---
[INFO] Failsafe report directory: C:\IdeaProjects\experiment_server\target\failsafe-reports
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.551s
[INFO] Finished at: Fri Mar 30 11:24:58 GMT-06:00 2012
[INFO] Final Memory: 5M/15M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.11:verify (default-cli) on project experiment-server: C:\IdeaProjects\experiment_server\target\failsafe-reports\failsafe-summary.xml (The system cannot find the path specified) -> [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
它抱怨找不到failsafe-summary.xml
。但这应该由插件创建。该插件运行良好(如果我运行 Antonio Goncalves 精彩 Arquillian example project,则会创建 failsafe-summary.xml
文件。
所以我复制了 Antonio 使用的确切插件信息,但它仍然无法在我的项目中运行。我已经将我的 POM 建模为与他的完全一样(除了没有父 pom)——一定是出了问题,我只是不知道是什么。为什么故障保护会在他的项目上运行,而不是我的??
这是我的failsafe pom.xml 条目,取自他的,与failsafe usaages 网站上的相同):
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>$version.maven.failsafe.plugin</version>
<configuration>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
感谢您的帮助,这让我发疯了。
更新好的,我似乎已经解决了cannot find failsafe-summary.xml
的问题——我将我的目录从experiment_server
更改为experiment-server
。我想这会破坏故障安全。
但是,我仍然无法通过命令 mvn verify
或 mvn integration-test
运行故障保护。这两个命令都调用surefire而不是failsafe。我现在可以使用以下命令直接运行故障安全:mvn failsafe:integration-test
,但不应该使用mvn verify
自动运行故障安全吗?我的mvn help:effective-pom
表明存在故障保护,所以这不是问题...有什么想法吗?
【问题讨论】:
你运行哪个 Maven 版本? 可以在 IT 未运行的地方添加运行的输出吗?你是怎么称呼 Maven 的? 我运行 Maven 3.04。我不明白你在第二个问题中要问什么。你能改写一下吗? 郑重声明,cannot find failsafe-summary.xml
问题不是由于目录名称问题,而是由于缺少 integration-test
目标/阶段绑定。
大卫,你应该回答这个问题,因为你的解决方案是正确的
【参考方案1】:
查看failsafe docs 以了解默认情况下failsafe
期望的测试名称:
<includes>
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
</includes>
您的测试是否按照这些模式之一命名?如果没有,请尝试在插件配置中定义 <includes>
元素。或者更改您的测试名称以适应默认模式。
好的,现在我们已经验证了测试类名称 - 通常当我将执行添加到插件配置时,我会这样做:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>$version.maven.failsafe.plugin</version>
<configuration>
</configuration>
<executions>
<execution>
<id>failsafe-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>failsafe-verify</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
这将您要运行的failsafe
插件目标明确绑定到构建生命周期的正确阶段。我相信surefire
插件默认绑定到test
生命周期阶段(无论如何对于jar、war 和ejb),但没有绑定到integration-test
或verify
。
【讨论】:
是的,我的集成测试被命名为 foobarIT.java。我什至尝试过明确地将includes
放入(现在又做了一次,以防万一)。现在的问题不是故障安全没有找到我的测试——当我运行mvn failsafe:integration-test
时它确实找到了。问题是当我运行 mvn verify
或 mvn integration-test
时,不调用故障安全,肯定是。
做到了!我想知道为什么 <goal>integration-test</goal>
以前不起作用。诡异的。无论如何,谢谢!【参考方案2】:
在这里,我将分享我的 2 美分。我有同样的问题,上面的解决方案没有解决我的问题。
我将 maven-failsafe-plugin 封装在 pluginManagement 标记中。当我在 4.0.0 maven 架构中看到这个文档时,我注意到将它移到 plugins 标记中:
默认插件信息可供参考 从这个衍生的项目。此插件配置不会 除非被引用,否则被解析或绑定到生命周期。任何本地 给定插件的配置将覆盖插件的整个 定义在这里。
希望这个附加信息。解决了更多像我这样的人的问题。
【讨论】:
顺便说一下,有时会违反此保证。例如,如果您在父 pom 的 pluginManagement 部分中定义 jRebel 插件,则 jRebel maven 插件将在每个子项目上运行,即使它没有显式添加到该子项目的插件定义中。所以,小心。【参考方案3】:对我来说,它只有在我添加了“默认”包含之后才起作用。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.15</version>
<configuration>
<includes>
<include>**/IT*.java</include>
<include>**/*IT.java</include>
<include>**/*ITCase.java</include>
<include>**/IntegrationTest*.java</include>
</includes>
</configuration>
<executions>
<execution>
<id>failsafe-integration-tests</id>
<phase>integration-test</phase>
<goals>
<goal>integration-test</goal>
</goals>
</execution>
<execution>
<id>failsafe-verify</id>
<phase>verify</phase>
<goals>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
【讨论】:
【参考方案4】:如果您运行的是 2.12.2 版本的故障保护插件,这是正常的。切换到以前的版本。好像2.13还没有。
Jira link
【讨论】:
以上是关于故障安全插件不会在一个项目上运行,但会在另一个项目上运行——为啥?的主要内容,如果未能解决你的问题,请参考以下文章
应用程序不会在 Xcode 模拟器上运行,但会在 iPhone 上运行
Python不会在bash中运行,但会在cmd中运行[重复]