2010-04-19 7 views
6

J'utilise le FTP Ant task avec maven-antrun-pluginComment empêcher l'échec de la génération de Maven en cas d'échec de la tâche 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> 
... 

le problème est que ma génération échoue lorsque le dossier $ {} ftp.server.remotedir n'existe pas.
J'ai essayé de préciser

skipFailedTransfers="true" 
ignoreNoncriticalErrors="true 

mais ceux-ci ne résout pas le problème et la construction échoue après.

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

Savez-vous comment charger mon build Maven pour ne se soucient pas de cette erreur de tâche Ant/ou comment instruire Ant ne manquent pas dans le cas d'un répertoire manquant?

Éditer:
La solution de Peter fonctionne.
Si vous un problème comme

[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 

Juste exclure fourmi ant-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

Je ne sais pas comment ignorer cette erreur, mais pourquoi utilisez-vous un antcall pendant la phase de génération de ressources de Maven. Peut-être faire partie de la phase de déploiement à la place..Peut-être que vous pouvez expliquer qu'un peu plus – khmarbaise

+0

J'ai juste besoin de mettre à jour les ressources du projet avant d'exécuter mes tests. En fait, la tâche Ant doit être exécutée pendant la phase 'generate-test-resources'. Les ressources (non nécessaires sur le déploiement) sont utilisées par les classes de test. Je ne veux pas que la tâche fourmi échoue si le dossier ftp n'existe pas. – mickthompson

Répondre

8

Peut-être vous avez besoin de penser plus comme Ant et moins comme Maven dans ce cas.

Voici une solution. Utilisez la tâche ant-contribtrycatch. Voici un exemple pom.xml. Copiez le bloc de code dans un fichier nommé pom.xml et exécutez mvn validate pour le voir fonctionner.

 


<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

Depuis maven-plugin-antrun 1.7, vous pouvez ajouter dans la configuration de la balise 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> 
Questions connexes