2014-12-19 13 views
5

Ich arbeite in einem Maven-Web-Projekt durch Eclipse. In der web.xml habe ich einen Kontext-Parameter, dessen Wert sollte sich ändern, das Profil, das ich verwende, wenn ich den Maven ausführen.Maven: wie man eine Variable in web.xml-Datei füllt

<context-param> 
    <param-name>producao</param-name> 
    <param-value>${ambiente.producao}</param-value> 
</context-param> 

In der pom-Datei für Projekt, das ich die folgende Konfiguration haben:

<project> 

    <profiles> 
     <profile> 
      <id>prod</id> 
      <properties> 
       <ambiente.producao>true</ambiente.producao> 
      </properties> 
     </profile> 
     <profile> 
      <id>desenv</id> 
      <properties> 
       <ambiente.producao>false</ambiente.producao> 
      </properties> 
     </profile> 
    </profiles> 

    <build> 

     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
      <resource> 
       <directory>src/main/webapp/WEB-INF/</directory> 
       <filtering>true</filtering> 
       <includes> 
        <include>**/web.xml</include> 
       </includes> 
      </resource> 
     </resources> 

     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.5</version> 
       <configuration> 
        <webResources> 
         <resource> 
          <filtering>true</filtering> 
          <directory>src/main/webapp</directory> 
          <includes> 
           <include>**/web.xml</include> 
          </includes> 
         </resource> 
        </webResources> 
        <warSourceDirectory>src/main/webapp</warSourceDirectory> 
        <webXml>src/main/webapp/WEB-INF/web.xml</webXml> 
       </configuration> 
      </plugin> 
     </plugins> 

    </build> 

</project> 

I Plugin sowohl resources Tag als Maven-Krieg-Plugin bin mit den Referenzen nach ich im Internet gefunden. Es hat jedoch nicht wie erwartet funktioniert. In der Eclipse starte ich den Maven mit den Zielen sauber zu installieren und als "Profile" entweder prod oder desenv. Nachdem ich den Maven ausgeführt habe, habe ich beobachtet, dass in web.xml die ${ambiente.producao} Eigenschaft nicht ersetzt wird. Daher würde ich gerne wissen, was ich falsch gemacht habe. Sollte ich nur die Filtering Ressource oder das Maven-War-Plugin benutzen?

Danke,

Rafael Afonso

Antwort

16

Glauben Sie nicht alles, was Sie im Internet lesen. Sie sollten src/main/webapp/WEB-INF/aus der Ressourcen Liste entfernen, wird es nur filtern Sie Ihre web.xml target/classes

Ihre maven-war-plugin Konfiguration, die gerade benötigt:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
    <filteringDeploymentDescriptors>true</filteringDeploymentDescriptors> 
    </configuration> 
</plugin> 

Nun, ob Sie bauen In Maven CLI oder in Eclipse müssen Sie eines dieser Profile aktivieren. In Befehlszeile müssen Sie

mvn sauber Paket -Pdesenv

in Eclipse (vorausgesetzt, Sie verwenden die Luna Java EE Verteilung oder neuer) ausführen können, können Sie das Profil aktivieren Sie möchten durch Drücken von Ctrl+Alt+P. Wenn Sie desenv aktivieren, wird die gefilterte web.xml unter target/m2e-wtp/web-resources/WEB-INF/ angezeigt. Dies ist die Datei, die auf Ihrem Anwendungsserver veröffentlicht wird.

Wenn Sie beide Profile gleichzeitig aktivieren, hat das letzte in Ihrer pom.xml aufgelistete Profil Vorrang.

Persönlich würde ich das Produktionsprofil entfernen und die Produktionseigenschaften in den Standardeigenschaftenabschnitt Ihrer pom.xml setzen. Auf diese Weise filtern Sie Ihre web.xml immer mit tatsächlichen Werten und Sie haben weniger Chancen, Ihre App versehentlich mit nicht produktiven Einstellungen zu erstellen und zu implementieren.

Und um das desenv Profil automatisch in Eclipse zu aktivieren, können Sie die folgende Aktivierungsregel hinzufügen:

<profile> 
    <id>desenv</id> 
    <!-- This profile is only activated when building in Eclipse with m2e --> 
    <activation> 
    <property> 
     <name>m2e.version</name> 
    </property> 
    </activation> 
    <properties> 
    <ambiente.producao>false</ambiente.producao> 
    </properties> 
</profile> 

Mehr auf dynamische Ressourcen Unterstützung in M2e-WTP Filterung hier: https://developer.jboss.org/en/tools/blog/2011/05/03/m2eclipse-wtp-0120-new-noteworthy

Und ein Screencast dort: http://screencast.com/t/hwodHqODBB

+1

Dies ist ein sehr optimaler und rationaler Ansatz und Erklärung. Vielen Dank! –

+1

Dies war ein magischer Schlüssel: "filteringDeploymentDescriptors> true" –

Verwandte Themen