2009-09-07 13 views
10

Ich führe eine Ant-Aufgabe, die einen Junit-Test aus Maven ausführt, mit maven-antrun-plugin. Der Aufruf sieht folgendermaßen aus:Fehler maven build, wenn maven-antrun-plugin fehlgeschlagen ist

Wenn die Tests fehlschlagen, wird der Build fortgesetzt und meldet Erfolg. Ich habe versucht, dieses Verhalten mit Ameise nur zu reproduzieren (Lauf Ant von der Kommandozeile ‚ant -f example.xml‘):

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

aber in diesem Fall alles wie erwartet: erste Testfehler stoppt den Build und meldet sie war nicht erfolgreich. Es sieht so aus, als ob Maven etwas zaubert (oder auf eine andere Weise eine Ameise nennt).

Also meine Frage, wie man den Effekt der fehlgeschlagenen Maven Build erreicht, wenn Antruntest Aufgabe fehlschlagen.

Antwort

4

Ihre Frage wirft eine offensichtliche Frage im Gegenzug auf, warum nicht einfach Maven verwenden, um JUnit zu betreiben? Die surefire plugin führt alle Tests (in der Testphase) aus, die in der Test-Compile-Phase in Target/Test-Klassen kompiliert wurden (normalerweise der Inhalt von src/test/java). Es gibt eine JavaWorld article Einführung in die Verwendung von Junit mit Maven

Angenommen, Sie haben einen gültigen Grund Ant zu verwenden, um die Tests aufzurufen, müssen Sie sicherstellen, dass Ant ist fehlgeschlagen, wenn die Tests ungültig sind. Sie können dies tun, indem Sie JUnit task konfigurieren. Die Eigenschaften, die Sie einstellen möchten, sind haltonerror oder Haltonfailure. Alternativ können Sie eine Eigenschaft für einen Fehler festlegen und den Ant-Build selbst unter Verwendung der Eigenschaft failureproperty fehlschlagen.

Ich habe zwei Beispiele aufgenommen, um einen Ant-Fehler zu demonstrieren, der einen Maven-Build-Fehler verursacht. Der erste ist ein direkter Aufruf der fehlgeschlagenen Aufgabe, der zweite Aufruf einer Aufgabe in einer build.xml auf die gleiche Weise wie Sie es getan haben.

Dieses triviale Beispiel zeigt, dass eine Ameise Ausfall verursacht ein Maven zum Scheitern verurteilt bauen:

<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. 

Erweiterung des Beispiels eine Ameise Aufruf zu verwenden, wie Sie haben:

<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> 

Mit build.xml wie:

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

gibt den folgenden Fehler:

[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. 
+0

Danke für Ihre Antwort! Der Grund, warum ich Ameisen verwende, um den Test auszuführen, ist, dass die Benutzeroberfläche meiner Anwendung in Netbeans Platform erfolgt. Die Plattform bietet fertige ant-Build-Dateien, die ich nicht portieren möchte. Ein Unterschied zwischen Ihrem Beispiel und dem, was ich beim Ausführen des Netbeans Platform-Buildziels erfahre, ist, dass in Ihrem Beispiel ein "BUILD ERROR" auftritt, während der Platform-Build eine "BUILD FAILED" -Meldung gibt.Vielleicht läuft Maven gegen sowas wie Junit's Aufgabe "Haltonerror", aber keine "Haltonfailure"? –

11

Sie vielleicht einen Blick auf die FailOnError Attribut für antrun nehmen wollen:

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

Reference.

+0

Jahre später ... Ich könnte RTFM, danke :-) (ist auch dokumentiert in Standard-Ant-Dokumentation https://ant.apache.org/manual/Tasks/exec.html) – Gunnar

Verwandte Themen