2012-05-23 21 views
5

Próbuję skonfigurować program maven do uruchamiania preprocesora LESS CSS w katalogu w moim projekcie WWW. Podstawowy przepływ to:Wywołanie foreach w wtyczce maven-antrun

  1. Maven nazywa wtyczkę maven-antrun.
  2. Ant-contrib <foreach/> wykonuje pętlę w katalogu i znajduje wszystkie pliki .less i wywołuje cel.
  3. Cel wykonuje Rhino, który wykonuje LESS, który konwertuje plik.

Aby to zrobić, mam następujące 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> 

Problem mam napotykając jest to, że "główny" target rozpoczyna realizację ale nie w <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] 

Wygląda na to, że coś w Ant spowodowało, że spróbował odczytać plik POM, prawdopodobnie szukając celu. Widzę, że oba cele zostały wygenerowane w plikach target/antrun/build-main.xml i target/antrun/build-processLessFile.xml, więc jest to katalog, w którym powinien się znaleźć.

+0

Masz na myśli raczej anty-contrib niż ant-collab, prawda? –

+0

Dzięki, ciągle piszę to źle. –

Odpowiedz

5

Wtyczka ant nie obsługuje deklaracji więcej niż jednej sekcji docelowej. Można sprawdzić wygenerowanego skryptu Ant, aby zobaczyć, co mówię:

target/antrun/build-main.xml 

Kopiąc głębiej plug-in documentation stany następujące:

Nie jest intencją tej wtyczki, aby zapewnić środki zanieczyszczając POM, dlatego zaleca się przeniesienie wszystkich zadań Ant do pliku build.xml i po prostu wywołanie go z POM za pomocą zadania Ant.

Ostre słowa, ale poradą jest dźwięk. Zalecam przeniesienie logiki ANT do dedykowanego pliku i wywołanie go w następujący sposób:

 <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

Jesteś świadomy lesscss-maven-plugin, który Myślę, że powinien rozwiązać twoje problemy.

+0

To by było, ale staram się pracować z oprogramowaniem na wewnętrznym repozytorium Maven mojej firmy przed dodaniem nowych zależności. –