2012-10-01 15 views
8

Podczas wdrażania aplikacji webowej muszę zaktualizować niektóre zmienne w zasobach interfejsu użytkownika, rozpakować niektóre zasoby i połączyć niektóre pliki, obecnie jest to realizowane przez zadanie ant. Próbuję uruchomić to zadanie w procesie kompilacji maven, używając coś takiego ...Wykonaj zadanie ant w fazie budowy maven, zanim wojna zostanie zapakowana?

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>prepare-package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Powyższe nie powiedzie, ponieważ pliki nie zostały jeszcze skopiowane do katalogu docelowego. Jeśli ustawię fazę na "pakiet", zadanie ant działa poprawnie, a wszystkie pliki są tworzone/poprawiane, ale nie jest to pomocne, ponieważ .war została już zbudowana przed uruchomieniem mrówki.

Zasadniczo muszę uruchomić mój cel mrówki pod koniec fazy przygotowawczej.

Po przejrzeniu choćby Lifecycle Reference nie mogę poćwiczyć, jak odsłonić bardziej szczegółowe cele do wtyczki antrun.

Wszelkie pomysły?

+0

Czy myślałeś o wykonywaniu tych zadań mrówek, używając zamiast tego "czystych" wtyczek? – maba

Odpowiedz

17

Ponieważ nie otrzymałem żadnej odpowiedzi na mój komentarz, myślę, że chcesz pozostać przy użyciu maven-antrun-plugin.

Z tego, czego się nauczyłem i doświadczyłem, jeśli dwie wtyczki mają zostać wykonane w tej samej fazie, zostaną wykonane w kolejności, w jakiej zostały zadeklarowane w pom.xml.

Aby to działało, musisz dodać maven-war-plugin na liście <plugins/> po maven-antrun-plugin.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.6</version> 
    <executions> 
     <execution> 
      <id>deploy-ui</id> 
      <phase>package</phase> 
      <inherited>false</inherited> 
      <configuration> 
       <target> 
        <property name="buildDir" value="${project.build.directory}/${project.build.finalName}" /> 
        <ant antfile="build.xml" target="static-assets" /> 
       </target> 
      </configuration> 
      <goals> 
       <goal>run</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.3</version> 
    <executions> 
     <execution> 
      <!-- First step is to disable the default-war build step. --> 
      <id>default-war</id> 
      <phase>none</phase> 
     </execution> 
     <execution> 
      <!-- Second step is to create an exploded war. Done in prepare-package --> 
      <id>war-exploded</id> 
      <phase>prepare-package</phase> 
      <goals> 
       <goal>exploded</goal> 
      </goals> 
     </execution> 
     <execution> 
      <!-- Last step is to make sure that the war is built in the package phase --> 
      <id>custom-war</id> 
      <phase>package</phase> 
      <goals> 
       <goal>war</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Dodane kilka egzekucje tak że default-war jest pierwszym niepełnosprawnym, wówczas wojna wybuchła i wreszcie wojna jest pakowany.

+3

to była bardzo pomocna odpowiedź na mój problem. Miałem jednak trochę inną konfigurację: eksplodowałem (przygotowuję pakiet) -> copy-resources (prepare-package) -> war (package). Aby nie nadpisać tego, co wojna: wygenerować zadanie powodujące wybuch, musiałem skierować '' do pustego katalogu w celu przeprowadzenia wojny: wojny. – omilke

1

Jak zauważyłeś, jest to miejsce, w którym cykl życia nie zapewnia wymaganej ziarnistości. Odpowiedziałem na numer similar question dla kogoś wcześniej. Nie jest to dokładna odpowiedź na twoje pytanie, ale technika może mieć zastosowanie.

Powiązane problemy