2012-05-23 11 views
5

Sto provando a configurare Maven per eseguire il preprocessore LESS CSS su una directory nel mio progetto web. Il flusso di base è:Chiamare foreach in maven-antrun-plugin

  1. Maven chiama maven-antrun-plugin.
  2. Ant-contrib <foreach/> scorre in una directory e trova tutti i file .less e chiama una destinazione.
  3. Il target esegue Rhino, che esegue MENO che converte il file.

Per fare questo, ho il seguente codice 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> 

Il problema che sto incontrando è che l'obiettivo "principale" inizia ad eseguire, ma poi non riesce a <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] 

Sembra che qualcosa in Ant lo stia provando a leggere il file POM, forse cercando il bersaglio. Vedo che entrambi i target sono stati generati in file target/antrun/build-main.xml e target/antrun/build-processLessFile.xml, quindi è la directory in cui dovrebbe essere.

+0

Vuoi dire ant-contrib piuttosto che ant-collab, vero? –

+0

Grazie, continuo a digitare quello sbagliato. –

risposta

5

Il plug-in ant non sembra supportare la dichiarazione di più di una sezione di destinazione. È possibile controllare lo script ANT generato per vedere che cosa sto parlando:

target/antrun/build-main.xml 

Scavando più a fondo i plug-in documentation stati i seguenti:

Non è intenzione di questo plugin per fornire un mezzo di inquinando il POM, quindi è consigliato spostare tutte le attività di Ant in un file build.xml e basta chiamarlo dal POM usando l'attività di Ant.

Parole dure, ma il consiglio è valido. Suggerirei di spostare la tua logica ANT in un file dedicato e di invocarla come segue:

 <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

Sei a conoscenza del lesscss-maven-plugin che penso che dovrebbe risolvere i tuoi problemi.

+0

Lo farei, ma sto provando a utilizzare il software sul repository Maven interno alla mia azienda prima di aggiungere nuove dipendenze. –