当maven-antrun-plugin失败时,maven构建失败

时间:2009-09-07 13:14:34

标签: maven-2 ant

我正在运行一个Ant任务,使用maven-antrun-plugin在maven中运行junit测试。调用如下所示:

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <id>ant-test</id>
      <phase>test</phase>
      <goals>
        <goal>run</goal>
      </goals>
      <configuration>
        <tasks unless="maven.test.skip">
          <ant antfile="${basedir}/build.xml" target="test">
            <property name="build.compiler" value="extJavac" />
          </ant>
        </tasks>
      </configuration>
    </execution>
</executions>
</plugin>  

当测试失败时,构建将继续并报告成功。我尝试仅使用ant重现此行为(从命令行'ant -f example.xml'运行Ant):

<project name="example" basedir="." default="aa">
<target name="aa">
  <ant antfile="build.xml" target="test" />
</target>
</project>

但在这种情况下,一切都如预期:第一次测试失败会停止构建并报告它不成功。它看起来像maven做了一些魔术(或以另一种方式调用蚂蚁)。

所以我的问题是如何在解决测试任务失败时如何实现失败的maven构建的效果。

2 个答案:

答案 0 :(得分:11)

您可能需要查看antrun的failonerror属性:

<exec executable="python" dir="${project.root}/modules" failonerror="true"></exec>

Reference

答案 1 :(得分:4)

你的问题提出了一个明显的问题,为什么不简单地使用Maven来运行JUnit? surefire plugin将执行在测试 - 编译阶段编译成目标/测试类(通常是src / test / java的内容)的任何测试(在测试阶段)。有一个JavaWorld article介绍如何使用Junit和Maven,你可能会觉得有用

假设您有正当理由使用Ant来调用测试,则需要确保在测试无效时将Ant设置为失败。您可以通过配置JUnit task来完成此操作。您可能希望设置的属性是 haltonerror haltonfailure 。或者,您可以在失败时设置属性,并使用 failureproperty 属性自行使Ant构建失败。


我已经包含了两个示例来演示导致Maven构建失败的Ant故障。第一个是直接调用失败任务,第二个调用build.xml中的任务,方式与您完成相同。

这个简单的例子表明,ant失败会导致Maven构建失败:

<plugins>
  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <execution>
        <phase>test</phase>
        <configuration>
          <tasks>
            <fail message="Something wrong here."/>
          </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An Ant BuildException has occured: Something wrong here.

扩展示例以使用ant调用:

<plugins>
  <plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
      <execution>
        <phase>test</phase>
        <configuration>
        <tasks unless="maven.test.skip">
          <ant antfile="${basedir}/build.xml" target="test">
            <property name="build.compiler" value="extJavac" />
          </ant>
        </tasks>
        </configuration>
        <goals>
          <goal>run</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>

使用build.xml:

<?xml version="1.0"?>
<project name="test" default="test" basedir=".">
  <target name="test">
    <fail message="Something wrong here."/>
  </target>
</project>

给出以下错误:

[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks

test:
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] An Ant BuildException has occured: The following error occurred while executing this line:
C:\test\anttest\build.xml:4: Something wrong here.