2012-04-12 18 views
5

Sto costruendo un progetto di applicazione web usando maven, e la confezione è impostata su "war". Uso anche il plug-in del compressore YUI per comprimere i codici javascript nella directory webapp. Ho installato il compressore YUI come questo:I file sono stati sovrascritti nel progetto Maven quando si creava una guerra

<plugin> 
    <groupId>net.alchim31.maven</groupId> 
    <artifactId>yuicompressor-maven-plugin</artifactId> 
    <version>1.3.0</version> 
    <executions> 
     <execution> 
     <phase>process-resources</phase> 
     <goals> 
      <goal>compress</goal> 
     </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <excludes> 
     <exclude>**/ext-2.0/**/*.js</exclude> 
     <exclude>**/lang/*.js</exclude> 
     <exclude>**/javascripts/flot/*.js</exclude> 
     <exclude>**/javascripts/jqplot/*.js</exclude> 
     </excludes> 
     <nosuffix>true</nosuffix> 
     <force>true</force> 
     <jswarn>false</jswarn> 
    </configuration> 
</plugin> 

se faccio: MVN processo-risorse, src/main/webapp otterrò copiato a bersaglio/webapp-1.0/directory, e javacripts sono compressi. Tuttavia, quando eseguo mvn install, tutti i javascript compressi vengono sovrascritti, apparentemente il processo di packaging copia il contenuto da main/webapp una volta prima di creare il file war.

Come posso aggirare questo?

risposta

10

Come avrete notato, il /src/main/webapp dir (aka warSourceDirectory) contenuto non viene copiato nella directory di progetto per imballaggi fino a quando il plug-in di guerra esegue durante la fase di pacchetto. Quando il plugin war termina, l'archivio è già compilato; troppo tardi per modificare tali risorse. Se i file .js che si desidera comprimere sono stati spostati in un'altra directory (al di fuori di /src/main/webapp), si potrebbe fare qualcosa di simile al seguente.

Per testare, ho creato una directory ${basedir}/src/play con un paio di file al suo interno. Ho usato il plugin resource per l'esempio; dovresti sostituire quella configurazione con la configurazione del plugin del compressore YUI che ti serviva e aggiungere semplicemente l'elemento <webResource> alla configurazione del plugin war come mostrato di seguito; maggiori informazioni nello war plugin examples. La mia guerra è finita con i file aggiuntivi proprio dove volevo.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>copy-resources</id> 
     <phase>process-resources</phase> 
     <goals><goal>copy-resources</goal></goals> 
     <configuration> 
     <outputDirectory>${project.build.directory}/tmpPlay</outputDirectory> 
     <resources> 
      <resource> 
      <directory>${project.basedir}/src/play</directory> 
      <includes> 
       <include>**/*</include> 
      </includes> 
      </resource> 
     </resources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>default-war</id> 
     <configuration> 
     <webResources> 
      <resource> 
      <directory>${project.build.directory}/tmpPlay</directory> 
      <targetPath>WEB-INF/yourLocationHere</targetPath> 
      <includes> 
       <include>**/*</include> 
      </includes> 
      </resource> 
     </webResources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
0

nella direttiva di esecuzione, impostare la fase per applicare la compressione e la copia da installare e che si spera faccia il trucco. il codice dovrebbe essere qualcosa di simile:

<executions> 
    <execution> 
     .... 
     <phase>install</phase> 
     .... 
    </execution> 
<executions> 
+0

sarà troppo tardi, ho anche provato pacchetto, il file di guerra creato non ha i codici javascript compressi. –

+0

E se aggiungeste una direttiva di fase al vostro plugin war e la impostaste su 'package' o' install' mentre impostate la fase per la compressione su 'prepare-package'? fondamentalmente assicurando che la creazione della guerra avvenga dopo aver compresso i file * .js? – nemo

4

Penso che @ utente944849 risponda è la risposta corretta, almeno una delle risposte corrette. Un altro modo di archiviazione questo è quello di escludere la modifica javascript directory dalla configurazione Maven-guerra-plugin, ad esempio:

<plugin> 
    <artifactId> maven-war-plugin </artifactId> 
    <configuration> 
     <warSourceExcludes>**/external/ dojo/**/*.js </warSourceExcludes> 
    </configuration> 
</plugin> 

questo vi dirà Maven-guerra-plugin non copiare dalla directory esclusi, ma dal momento che il javascript modificato la directory è già lì, il file war contiene ancora la directory javascript, MA con i codici javascript compressi, in questo caso modificati.

+0

questo ha funzionato per me .. :) – Venky

0

Ecco la mia soluzione, è sufficiente aggiungere un plugin antrun che aggiorna il file di guerra confezionato utilizzando le uscite elaborati, che si lega alla fase pacchetto:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>package</id> 
        <phase>package</phase> 
        <configuration> 
         <target> 
          <zip basedir="${project.build.directory}/${project.build.finalName}" 
           destfile="${project.build.directory}/${project.build.finalName}.war" 
           update="true"> 
          </zip> 
         </target> 
        </configuration> 
        <goals> 
         <goal>run</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
Problemi correlati