2010-12-06 27 views
6

Nous avons une routine spéciale pour faire exploser les fichiers dans un sous-dossier en extensions, qui seront copiés et jarés en fichiers d'extension unique. Pour cette approche particulière, je voulais utiliser le maven-antrun-plugin, pour l'itération séquentielle et l'empaquetage de pot à travers le dirset, nous avons besoin de la bibliothèque ant-contrib.Maven antrun avec ant-contrib séquentielle ne fonctionne pas

La configuration du plug-in à venir échoue avec une erreur. Qu'est-ce que j'ai mal configuré? Je vous remercie.

Configuration du plugin

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
    <execution> 
     <phase>validate</phase> 
     <goals> 
     <goal>run</goal> 
     </goals> 
     <configuration> 
     <target> 
      <for param="extension"> 
      <path> 
       <dirset dir="${basedir}/src/main/webapp/WEB-INF/resources/extensions/"> 
       <include name="*" /> 
       </dirset> 
      </path> 

      <sequential> 
       <basename property="extension.name" file="${extension}" /> 
       <echo message="Creating JAR for extension '${extension.name}'." /> 
       <jar destfile="${basedir}/target/extension-${extension.name}-1.0.0.jar"> 
       <zipfileset dir="${extension}" prefix="WEB-INF/resources/extensions/${extension.name}/"> 
        <include name="**/*" /> 
       </zipfileset> 
       </jar> 
      </sequential> 
      </for> 
     </target> 
     </configuration> 
    </execution> 
    </executions> 
    <dependencies> 
    <dependency> 
     <groupId>ant-contrib</groupId> 
     <artifactId>ant-contrib</artifactId> 
     <version>1.0b3</version> 
     <exclusions> 
     <exclusion> 
      <groupId>ant</groupId> 
      <artifactId>ant</artifactId> 
     </exclusion> 
     </exclusions> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.ant</groupId> 
     <artifactId>ant-nodeps</artifactId> 
     <version>1.8.1</version> 
    </dependency> 
    </dependencies> 
</plugin> 

Erreur

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.6:run (default) on project extension-platform: An Ant BuildException has occured: Problem: failed to create task or type for 
[ERROR] Cause: The name is undefined. 
[ERROR] Action: Check the spelling. 
[ERROR] Action: Check that any custom tasks/types have been declared. 
[ERROR] Action: Check that any <presetdef>/<macrodef> declarations have taken place. 
[ERROR] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 

Répondre

9

On dirait que vous manquez le taskdef qui est nécessaire pour declare the ant-contrib tasks, de sorte que Ant sait à leur sujet, d'où cette partie le message d'erreur:

Problem: failed to create task or type for 

(. Il serait peut-être un peu plus clair si la tâche a échoué - 'for' - ont été cités)

Une façon d'ajouter le taskdef est d'insérer immédiatement avant la boucle for:

<target> 
    <taskdef resource="net/sf/antcontrib/antlib.xml" 
      classpathref="maven.plugin.classpath" /> 
    <for param="extension"> 
    ... 
+0

Merci, cela a très bien fonctionné pour moi. J'ai également essayé ceci mais utilisé la mauvaise référence de classpath. – codevour

10

donc je gaspillée au moins une heure pour trouver l'erreur un petit indice ci-dessous ...

-je utiliser maven3 et le reste comme décrit ci-dessus, mais je dois utiliser maven.dependency.classpath au lieu de maven.plugin.classpath ! Sinon, maven ne trouvera pas les tâches contrib. J'espère que cela aide tout le monde.

0

Après avoir perdu 2 heures et la lecture trop de réponses, ce que je dois vérifier

http://www.thinkplexx.com/learn/howto/maven2/plugins/could-not-load-definitions-from-resource-antlib-xml-understanding-the-problem-and-fix-worklow

J'ai imprimé tous les classpaths maven en utilisant ce

<property name="compile_classpath" refid="maven.compile.classpath"/> 
<property name="runtime_classpath" refid="maven.runtime.classpath"/> 
<property name="test_classpath" refid="maven.test.classpath"/> 
<property name="plugin_classpath" refid="maven.plugin.classpath"/> 
<echo message="compile classpath: ${compile_classpath}"/> 
<echo message="runtime classpath: ${runtime_classpath}"/> 
<echo message="test classpath: ${test_classpath}"/> 
<echo message="plugin classpath: ${plugin_classpath}"/> 

et vérifié que classpath contient Fichier jar antrib. Donc j'ai changé classpathhref à maven.runtime.classpath de maven.plugin.classpath . Donc, mon taskdef est

<taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.runtime.classpath" /> 

et les dépendances

<dependency> 
    <groupId>ant-contrib</groupId> 
    <artifactId>ant-contrib</artifactId> 
    <version>1.0b3</version> 
    <exclusions> 
     <exclusion> 
      <groupId>ant</groupId> 
      <artifactId>ant</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<dependency> 
    <groupId>org.apache.ant</groupId> 
    <artifactId>ant-nodeps</artifactId> 
    <version>1.8.1</version> 
</dependency>