2012-04-12 9 views
5

Ich bin ein Web-Anwendungsprojekt mit Maven bauen, und die Verpackung ist auf "Krieg" eingestellt. Ich benutze auch YUI Kompressor-Plugin, um Javascript-Codes im Webapp-Verzeichnis zu komprimieren. Ich habe den YUI Kompressor wie folgt aufgebaut:Dateien wurden beim Erstellen eines Krieges in Maven-Projekt überschrieben

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

Wenn ich tun: mvn Prozess-Ressourcen, src/main/webapp wird gezielt erhalten kopiert/Webapp-1.0/Verzeichnis und javacripts komprimiert werden. Wenn ich jedoch mvn install ausführe, werden alle komprimierten Javascripts überschrieben, anscheinend kopiert der Verpackungsprozess den Inhalt von main/webapp einmal, bevor er die WAR-Datei erstellt.

Wie kann ich das umgehen?

Antwort

10

Wie Sie bemerkt haben, die /src/main/webapp dir (aka warSourceDirectory) Inhalt wird nicht kopiert in das Projekt Verzeichnis für die Verpackung, bis der Krieg Plugin während der Paketphase ausführt: Der Code sollte wie folgt sein. Wenn das War-Plugin abgeschlossen ist, ist das Archiv bereits erstellt. zu spät, um diese Ressourcen zu modifizieren. Wenn die .js-Dateien, die Sie komprimieren möchten, in ein anderes Verzeichnis (außerhalb von /src/main/webapp) verschoben wurden, können Sie etwas wie das Folgende tun.

Um zu testen, erstellte ich ein ${basedir}/src/play Verzeichnis mit ein paar Dateien drin. Ich habe das resource Plugin für das Beispiel verwendet; Sie würden diese Konfiguration durch die von Ihnen benötigte YUI-Compressor-Plugin-Konfiguration ersetzen und einfach das <webResource>-Element zu Ihrer war-Plugin-Konfiguration hinzufügen, wie unten gezeigt; mehr Infos in der war plugin examples. Mein Krieg endete mit den zusätzlichen Dateien genau dort, wo ich sie haben wollte.

0

In Ihrer Ausführungsrichtlinie legen Sie die Phase für das Anwenden Ihrer Komprimierung und das Kopieren fest, um installiert zu werden, und das wird hoffentlich den Trick machen.

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

es schon zu spät sein werde, ich habe sogar versucht Paket, die erstellte WAR-Datei enthält keine komprimierten JavaScript-Codes. –

+0

Was ist, wenn Sie eine Phase-Direktive zu Ihrem War-Plugin hinzufügen und es auf 'package' oder' install' setzen, während Sie die Phase für Ihre Komprimierung auf 'prepare-package' einstellen? Grundsätzlich sicherstellen, dass die Erstellung des Krieges nach dem Komprimieren der * .js-Dateien passiert? – nemo

4

Ich denke @ user944849 Antwort ist die richtige Antwort, mindestens eine der richtigen Antworten. Ein andere Möglichkeit, diese zu archivieren ist das modifizierte Javascript Verzeichnis von Maven-Krieg-Plugin-Konfiguration auszuschließen, zB:

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

dies sagt Maven-Krieg-Plugin nicht aus dem ausgeschlossenen Verzeichnis zu kopieren, aber da das modifizierte javascript Verzeichnis ist schon da, die WAR-Datei enthält noch das Javascript-Verzeichnis, ABER mit den modifizierten, in diesem Fall komprimierten Javascript-Codes.

+0

das hat für mich funktioniert .. :) – Venky

0

Hier meine Lösung ist einfach eine antrun Plugin hinzufügen, die die verpackte IST-Datei unter Verwendung der verarbeiteten Ausgänge aktualisiert, die das Paket Phase bindet:

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