2012-10-01 16 views
8

Quando si distribuisce una webapp, ho bisogno di aggiornare alcune variabili nelle risorse dell'interfaccia utente, decomprimere alcune risorse e concatenare alcuni file, attualmente questo è ottenuto tramite un task ant. Sto cercando di eseguire questo compito nel processo di generazione Maven usando qualcosa di simile ...Esegui un'attività di formica nella fase di costruzione di Maven prima che la guerra sia confezionata?

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

È possibile che non riesce perché i file non sono ancora stati copiati nella directory di destinazione. Se imposto la fase su "pacchetto", l'attività ant viene eseguita correttamente e tutti i file vengono creati/modificati, ma non è di aiuto poiché il file .war è già stato creato prima dell'esecuzione dell'anteprima della formica.

Fondamentalmente, ho bisogno di eseguire il mio obiettivo di formica vicino alla fine della fase di preparazione del pacchetto.

Dopo aver guardato il Lifecycle Reference non riesco a allenare come esporre gli obiettivi più granulari al plug-in di antrun.

Qualche idea?

+0

Hai mai pensato di fare quelle attività di formica usando i plugin "puri" di Maven? – maba

risposta

17

Poiché non ho ricevuto risposta sul mio commento, suppongo che tu voglia continuare a utilizzare maven-antrun-plugin.

Da quanto ho appreso e sperimentato, se due plug-in devono essere eseguiti sulla stessa fase, verranno eseguiti nell'ordine in cui sono dichiarati in pom.xml.

Per questo motivo è necessario aggiungere lo maven-war-plugin nell'elenco <plugins/> dopo lo 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> 

Aggiunto alcuni più esecuzioni in modo che il default-war è il primo disabile, poi la guerra è esplosa ed infine la guerra è confezionato.

+3

questa è stata una risposta molto utile per il mio problema. Tuttavia, ho avuto un setup leggermente diverso: esploso (pacchetto di preparazione) -> copia-risorse (pacchetto di preparazione) -> guerra (pacchetto). Per non sovrascrivere ciò che la guerra: esplodere l'attività generata, ho dovuto puntare '' in una directory vuota per la guerra: esecuzione di guerra. – omilke

1

Come è stato osservato questo è un luogo in cui il ciclo di vita non fornisce la granularità necessaria. Ho risposto a uno similar question per qualcuno prima. Non è una risposta esatta alla tua domanda, ma la tecnica potrebbe applicarsi.

Problemi correlati