2010-04-19 6 views
6

Ich verwende die FTP Ant task mit maven-antrun-pluginWie verhindere ich Maven-Build-Fehler beim Ant-Task-Fehler?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>ftp</id> 
      <phase>generate-resources</phase> 
      <configuration> 
       <tasks> 
        <ftp action="get" 
         server="${ftp.server.ip}" 
         userid="${ftp.server.userid}" 
         password="${ftp.server.password}" 
         remotedir="${ftp.server.remotedir}" 
         depends="yes" verbose="yes" 
         skipFailedTransfers="true" 
         ignoreNoncriticalErrors="true"> 
         <fileset dir="target/test-classes/testdata"> 
          <include name="**/*.html" /> 
         </fileset> 
        </ftp> 
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
... 

das Problem ist, dass mein Build fehlschlägt, wenn der Ordner $ {ftp.server.remotedir} existiert nicht.
Ich versuchte

skipFailedTransfers="true" 
ignoreNoncriticalErrors="true 

angeben, aber diese das Problem nicht beheben und die Build hält scheitern.

An Ant BuildException has occured: could not change remote directory: 550 /myBadDir: The system cannot find the file specified. 

Wissen Sie, wie mein Maven Build anweisen, diesen Ant-Task-Fehler kümmern/oder wie Ant anweisen, im Fall eines fehlenden Verzeichnis nicht scheitern?

Bearbeiten:
Peters Lösung funktioniert.
Wenn Sie ein Problem wie

[INFO] Error configuring: org.apache.maven.plugins:maven-antrun-plugin. Reason: java.lang.NoSuchMethodError: org.apache.tools.ant.util.FileUtils.close(Ljava/io/InputStream;)V 

Nur Ameise ausschließen Ameisen contrib

<dependency> 
    <groupId>ant-contrib</groupId> 
    <artifactId>ant-contrib</artifactId> 
    <version>${ant-contrib.ver}</version> 
    <exclusions> 
     <exclusion> 
      <groupId>ant</groupId> 
      <artifactId>ant</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
+0

Ich weiß nicht, wie man diese Fehler überspringen, aber warum verwenden Sie eine antcall während der Generate-Resources-Phase von Maven. Kann stattdessen ein Teil der Bereitstellungsphase sein .. Vielleicht können Sie das ein wenig mehr erklären – khmarbaise

+0

Ich muss nur die Ressourcen des Projekts aktualisieren, bevor ich meine Tests durchführe. Eigentlich sollte die Ant-Task während der 'generate-tests-resources' Phase laufen. Die Ressourcen (nicht für die Bereitstellung erforderlich) werden von Testklassen verwendet. Ich möchte nicht, dass die ant-Task fehlschlägt, wenn der ftp-Ordner nicht existiert. – mickthompson

Antwort

8

Sie vielleicht brauchen mehr wie Ant und weniger wie Maven in diesem Fall zu denken.

Hier ist eine Lösung. Verwenden Sie die Aufgabe ant-contribtrycatch. Hier ist ein Beispiel pom.xml. Kopieren Sie den Codeblock in eine Datei mit dem Namen pom.xml, und führen Sie mvn validate aus, damit es funktioniert.

 


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.stackoverflow.q2666794</groupId> 
    <artifactId>trycatch</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>trycatch</name> 
    <url>http://maven.apache.org</url> 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-antrun-plugin</artifactId> 
     <version>1.3</version> 
     <executions> 
      <execution> 
      <id>trycatch</id> 
      <phase>validate</phase> 
      <configuration> 
       <tasks> 
       <taskdef resource="net/sf/antcontrib/antcontrib.properties"/> 
       <trycatch> 
        <try> 
        <fail>Failing ftp task should go here</fail> 
        </try> 
        <catch> 
        <echo>See the error was caught and ignored</echo> 
        </catch> 
       </trycatch> 
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
      </execution> 
     </executions> 
     <dependencies> 
      <dependency> 
      <groupId>ant-contrib</groupId> 
      <artifactId>ant-contrib</artifactId> 
      <version>1.0b3</version> 
      <exclusions> 
       <exclusion> 
       <artifactId>ant</artifactId> 
       <groupId>ant</groupId> 
       </exclusion> 
      </exclusions> 
      </dependency> 
     </dependencies> 
     </plugin> 
    </plugins> 
    </build> 
</project> 
0

Da Maven-antrun-Plugin 1.7 können Sie das Tag FailOnError in der Konfiguration hinzufügen

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>ftp</id> 
      <phase>generate-resources</phase> 
      <configuration> 
       <failOnError>false</failOnError> 
       <tasks> 
        <ftp action="get" 
         server="${ftp.server.ip}" 
         userid="${ftp.server.userid}" 
         password="${ftp.server.password}" 
         remotedir="${ftp.server.remotedir}" 
         depends="yes" verbose="yes" 
         skipFailedTransfers="true" 
         ignoreNoncriticalErrors="true"> 
         <fileset dir="target/test-classes/testdata"> 
          <include name="**/*.html" /> 
         </fileset> 
        </ftp> 
       </tasks> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin>