2012-05-23 14 views
5

Estoy intentando configurar maven para ejecutar el preprocesador LESS CSS en un directorio de mi proyecto web. El flujo básico es:Llamando a foreach en maven-antrun-plugin

  1. Maven llama a maven-antrun-plugin.
  2. Ant-contrib <foreach/> recorre un directorio y encuentra todos los archivos .less y llama a un destino.
  3. El destino ejecuta Rhino, que ejecuta LESS que convierte el archivo.

Para ello, tengo el siguiente código XML:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.7</version> 
      <executions> 
       <execution> 
        <phase>compile</phase> 
        <configuration> 
         <target name="processLessFile"> 
          <!-- ... --> 
         </target> 
         <target name="main"> 
          <taskdef resource="net/sf/antcontrib/antcontrib.properties" classpathref="maven.plugin.classpath"/> 
          <property name="css.dir" location="src/main/webapp/css"/> 
          <foreach param="file" target="processLessFile"> 
           <fileset dir="${css.dir}"> 
            <filename name="**/*.less" /> 
           </fileset> 
          </foreach> 
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
      <dependencies> 
       <dependency> 
        <groupId>ant</groupId> 
        <artifactId>ant-contrib</artifactId> 
        <version>1.0b2</version> 
       </dependency> 
      </dependencies> 
     </plugin> 

El problema que estoy encontrando es que el objetivo "principal" comienza a ejecutar, pero luego falla en <foreach>:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.7:run (default) on project model-web-project: An Ant BuildException has occured: The following error occurred while executing this line: 
[ERROR] /Users/.../pom.xml:4: Unexpected element "{http://maven.apache.org/POM/4.0.0}project" {antlib:org.apache.tools.ant}project 
[ERROR] around Ant part ...<foreach param="file" target="processLessFile">... @ 6:50 in /Users/.../target/antrun/build-main.xml 
[ERROR] -> [Help 1] 

Parece que algo en Ant está haciendo que intente leer el archivo POM, posiblemente buscando el objetivo. Veo que ambos objetivos se generaron en los archivos target/antrun/build-main.xml y target/antrun/build-processLessFile.xml, por lo que es el directorio en el que debería estar buscando.

+0

Se refiere a ant-contrib en lugar de ant-collab, ¿no? –

+0

Gracias, sigo escribiendo eso mal. –

Respuesta

5

El complemento Ant no parece ser compatible con la declaración de más de una sección de destino. Puede comprobar la secuencia de comandos generada ANT para ver lo que estoy hablando:

target/antrun/build-main.xml 

investigar más profundamente los plug-in documentation indica lo siguiente:

No es la intención de este plugin para proporcionar un medio de contaminando el POM, por lo que se recomienda mover todas las tareas Ant a un archivo build.xml y simplemente llamarlo desde el POM usando la tarea de Ant.

Palabras ásperas, pero el consejo es bueno. Recomiendo mover su lógica ANT a un archivo dedicado e invocarlo de la siguiente manera:

 <plugin> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.7</version> 
      <executions> 
       <execution> 
        <phase>compile</phase> 
        <configuration> 
         <target> 
          <ant antfile="${basedir}/src/main/ant/build.xml"/> 
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
1

Usted conoce el lesscss-maven-plugin que creo que debería resolver tus problemas

+0

Sería, pero estoy tratando de trabajar usando software en el repositorio interno de Maven de mi compañía antes de agregar nuevas dependencias. –