2010-12-06 10 views
6

Tenemos una rutina especial para descomponer los archivos en una subcarpeta en extensiones, que se copiarán y convertirán en archivos de extensión individuales. Para este enfoque especial, quería usar el maven-antrun-plugin, para la iteración secuencial y el empaquetamiento de jar a través del dirset, necesitamos la biblioteca ant-contrib.Maven antrun con secuencial ant-contrib no se ejecuta

La próxima configuración del complemento falla con un error. ¿Qué configuré mal? Gracias.

configuración del 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> 

error

[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 

Respuesta

9

Parece que se está perdiendo el taskdef que se necesita para declare the ant-contrib tasks, de manera que la hormiga sabe acerca de ellos, por lo tanto, esta parte de el mensaje de error:

Problem: failed to create task or type for 

(. Tal vez sería un poco más claro si la tarea no - 'for' - fueron citados)

Una forma de añadir el taskdef es insertar inmediatamente antes de la for bucle:

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

Gracias, esto funcionó muy bien para mí. También probé esto pero utilicé la referencia incorrecta de classpath. – codevour

10

por lo tanto desperdicia al menos una hora para encontrar el error una pequeña pista de abajo ...

usar maven3 y el resto como se ha descrito anteriormente, pero tengo que usar maven.dependency.classpath en lugar de maven.plugin.classpath ! De lo contrario, maven no encontrará las tareas de contrib. Espero que esto ayude a cualquiera.

0

Después de perder 2 horas y leyendo demasiadas respuestas, esto es lo que necesito para comprobar

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

Imprimí todas las rutas de clases de Maven utiliza este

<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}"/> 

y controlados, que la ruta de clase contiene archivo jar de antrib Así que cambié classpathhref a maven.runtime.classpath desde maven.plugin.classpath . Así que mi taskdef es

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

y las dependencias

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