2010-04-19 9 views
6

estoy usando el FTP Ant task con maven-antrun-plugin¿Cómo evito que Maven build falle en la falla de la tarea Ant?

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

el problema es que mi generación falla cuando la carpeta $ {} ftp.server.remotedir no existe.
Me trataron de especificar

skipFailedTransfers="true" 
ignoreNoncriticalErrors="true 

pero éstos no se soluciona el problema y la acumulación sigue fallando.

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

¿Usted sabe cómo instruir a mi construcción Maven no se preocupan por este error tarea Ant/o la forma de instruir a Ant para no fallar en el caso de un directorio que falta?

Editar:
La solución de Peter funciona.
Si un problema como

[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 

Sólo excluye la hormiga del hormiguero 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

No sé cómo omitir este error, pero ¿por qué estás usando una anticipo durante la fase de generación de recursos de Maven. Puede ser parte de la fase de implementación instead..May ser que usted puede explicar que un poco más – khmarbaise

+0

sólo hay que actualizar los recursos del proyecto antes de ejecutar mis pruebas. En realidad, la tarea Ant debe ejecutarse durante la fase 'generar-probar-recursos'. Los recursos (no necesarios en la implementación) son utilizados por las clases de prueba. No quiero que la tarea ant falle si la carpeta ftp no existe. – mickthompson

Respuesta

8

Tal vez usted necesita pensar más como Ant y menos como Maven en este caso.

Aquí es una solución. Use la tarea ant-contribtrycatch. Aquí hay un ejemplo pom.xml. Copie el bloque de código en un archivo llamado pom.xml y ejecute mvn validate para ver cómo funciona.

 


<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

Desde experto-antRun-plugin 1.7 se puede añadir en la configuración de la etiqueta de FailOnError

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