2010-08-24 8 views
7

Ich versuche zu steuern, welche Dateien in das WAR-Paket, das von mvn package Ziel erstellt wird. Insbesondere möchte ich einige Dateien aus dem Standardordner src/main/resources für jedes Paket ausschließen (ich versuche, Builds/Pakete für verschiedene Umgebungen zu erstellen).Auswählen der bestimmten Ressourcen-Dateien in WAR aus dem Standard-Speicherort src/main/resources mit Maven

Ich versuchte mit maven-war-plugin aber fehlgeschlagen. Wenn ich hinzufügen, diese Konfiguration (zur Prüfung):

<webResources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <targetPath>WEB-INF/classes</targetPath> 
     <excludes> 
      <exclude>*.xml</exclude> 
     </excludes> 
    </resource> 
</webResources> 

... meine WEB-INF/classes noch die XML-Dateien enthalten. Das liegt daran, dass der Parameter webResources den Kopiervorgang zu kopieren scheint (die obige Konfiguration funktioniert tatsächlich, Dateien werden nicht kopiert ... aber sie werden stattdessen in den Prozess andere kopiert).

Maven-war-plugin documentation Zustände:

Das Standard-Ressourcenverzeichnis für alle Maven 2 Projekte src/main/resources ist, die in Ziel-/Klassen werden am Ende und in WEB-INF/classes in dem Krieg. Die Verzeichnisstruktur bleibt dabei erhalten.

Das WAR-Plugin ist auch in der Lage, Ressourcen einzubeziehen, die nicht im Standardressourcenverzeichnis durch den Parameter webResources gefunden werden.

Dies ist ein bisschen verwirrend. Bedeutet es, dass:

  • Der webResources Parameter ist eine Funktion in Maven-Krieg-Plugin, das Dateien erlaubt nur von außen src/main/resources Ordner aufgenommen werden? Wenn ja, wie können wir die kopierten Dateien von innen src/main/resources ändern?
  • Der webResources Parameter ist eine Funktion in maven-war-plugin, mit der Dateien eingeschlossen werden können auch von außerhalb src/main/resources Ordner? Wenn ja, wie kann dies konfiguriert werden?
  • Eine andere Option?
+0

Versuchen Sie, für verschiedene Umgebungen mit dem gleichen MVN-Paket zu erstellen, oder steuern Sie das mithilfe von Profilen? – khmarbaise

+0

Ja, ich benutze Profile. –

Antwort

11

Ich versuche, welche Dateien in die WAR-Paket machen zu steuern, die von mvn Paket Ziel erstellt wird. Insbesondere möchte ich für jedes Paket aus dem Standard-Ressourcenverzeichnis (src/main/resources)

Ressourcen einige Dateien aus dem Standard-src/main/resources Ordner auszuschließen sind in den Build-Ausgabeverzeichnis kopiert (target/classes) während der process-resources Phase. Dann, während der Phase package, wird der Inhalt von target/classes genommen und in ein verteiltes Archiv wie ein WAR verpackt und endet in diesem Fall in WEB-INF/classes.

Also, wenn Sie steuern möchten, welche Ressourcen in WEB-INF/classes landen, müssen Sie steuern, welche Ressourcen in target/classes werden am Ende das heißt irgendwie das Verhalten von the goal bound to the process-resources phase zu verändern, insbesondere das resources:resources Ziel der Maven Resources Plugin.

Und so zu tun (das ist wahrscheinlich nicht intuitiv), können Sie exclude oder include Elemente innerhalb resources Element der pom erklären, wie in Including and excluding files and directories gezeigt. Angewandt auf die Standard-Ressource-Verzeichnis:

<build> 
    <resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <excludes> 
     <exclude>**/*.xml</exclude> 
     </excludes> 
    </resource> 
    </resources> 
</build> 

Und wenn Sie verwenden benutzerdefinierte Ausnahmeregeln für verschiedene Umgebungen tun wollen, kombinieren diese mit profiles. Zum Beispiel:

<project> 
    ... 
    <profiles> 
    <profile> 
     <id>env-uat</id> 
     <activation> 
     <property> 
      <name>env</name> 
      <value>uat</value> 
     </property> 
     </activation> 
     <build> 
     <resources> 
      <resource> 
      <directory>src/main/resources</directory> 
      <excludes> 
       <exclude>**/*.xml</exclude> 
      </excludes> 
      </resource> 
     </resources> 
     </build> 
    </profile> 
    </profiles> 
</project> 

Und wenn dieses Profil verwendet, werden nicht auf den XML-Dateien in target/classes beenden und folglich werden sie nicht in WEB-INF/classes in dem letzten Krieg enden.

Ich versuchte mit maven-war-plugin aber fehlgeschlagen. Wenn ich diese Konfiguration hinzufügen (zum Testen) (...) meine WEB-INF/classes noch die XML-Dateien enthalten

Was sind Sie denn hier ist das Hinzufügen eines zusätzliche Ressourcen-Verzeichnis, das erscheint das bereits enthaltene Standardressourcenverzeichnis sein. Was auch immer Sie ausschließen, dies hat keine Auswirkungen, da die Dateien sowieso unter target/classes während process-resources kopiert werden und somit immer noch in WEB-INF/classes enden.

Mit anderen Worten, verwenden webResources, wenn Sie zusätzliche Ressourcen hinzufügen möchten, die nicht Teil der Standard-Ressourcenverzeichnis sind:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.1</version> 
     <configuration> 
      <webResources> 
      <resource> 
       <!-- this is relative to the pom.xml directory --> 
       <directory>extra-resources</directory> 
      </resource> 
      </webResources> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

Aber ich glaube nicht, dass das ist, was Sie hier suchen und schlagen vor, den oben vorgeschlagenen Ansatz zu verwenden.

+0

Ich habe tatsächlich versucht, Dateien im "globalen" 'Ressourcen'-Element auszuschließen. Das Ergebnis war, dass die ausgeschlossenen Dateien nicht in "target/classes" gelangten, jedoch immer noch in "target/mypackage-1.0.0-SNAPSHOT". Aber ich werde das nochmal überprüfen, nur um sicherzugehen, vielleicht habe ich da einen Tippfehler gemacht:/ –

+0

@Tuukka Hmm ... Ja, bitte, überprüfe das (mit einem sauberen Build). –

+0

@ Pascal: nachdem ich es so versucht habe, scheint es zu funktionieren. Vielleicht habe ich früher einen Fehler gemacht und bin ein bisschen verwirrt über den ganzen Prozess:/Ihr Vorschlag ist definitiv der richtige. Ich habe immer noch ein Problem mit "Kompilierungsfehler" aufgrund von "illegalem Ausdrucksstart", weil Maven die Anmerkungen, die ich in Tests verwende, nicht "erkennt". Dies scheint jedoch ein gewöhnliches Maven-Problem zu sein und steht nicht im Zusammenhang mit dem Ausschluss von Dateien. Ich werde versuchen, das nächste zu lösen :) Vielen Dank für Ihre Unterstützung! –

0

Siehe Pascal's answer for right configuration and good explanation of the process. Ich gebe nur eine direkte Antwort auf diese Frage hier:

  • Der webResources Parameter eine Funktion in Maven-Krieg-Plugin, das Dateien erlaubt aufgenommen werden soll nur von außen src/main/resources-Ordner? Wenn ja, wie können wir die kopierten Dateien von src/main/resources aus ändern?
  • Der Parameter webResources ist eine Funktion in maven-war-plugin, mit der Dateien eingeschlossen werden können auch von außerhalb src/main/resources Ordner? Wenn ja, wie kann dies konfiguriert werden?

Es ist der ehemalige, der webResources Parameter in maven-war-plugin erlaubt nur eine von außen src/main/resourceszusätzliche Ressourcen einzubeziehen. Es nicht erlaubt man zu konfigurieren, enthält/schließt für src/main/resources sich.