2014-12-19 8 views
5

Pracuję w projekcie sieciowym Maven za pośrednictwem Eclipse. W web.xml mam kontekst-parametr, którego wartość powinna zmieniać się w zależności od profilu, którego używam, gdy uruchamiam Mavena.Maven: jak wypełnić zmienną w pliku web.xml

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

W pliku POM dla potrzeb projektu Mam następującą konfigurację:

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

używam zarówno resources tag jako maven plugin-war-plugin według odnośnikach znalazłem w internecie. Jednak nie zadziałał zgodnie z oczekiwaniami. W Eclipse uruchamiam maven z bramkami czystą instalację i jako "Profile" albo prod lub desenv. Po uruchomieniu Mavena zauważyłem, że w web.xml właściwość ${ambiente.producao} nie jest zastępowana. Dlatego chciałbym wiedzieć, co zrobiłem źle. Czy powinienem używać tylko Zasobów filtrowania lub wtyczki do maven-war?

Dzięki

Rafael Afonso

Odpowiedz

16

Nie wierz we wszystko, co przeczytasz w internecie. Należy usunąć src/main/webapp/WEB-INF/z listy zasobów, będzie to po prostu filtrować web.xml do target/classes

swoją konfigurację maven-war-plugin prostu potrzebuje:

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

teraz, czy można zbudować w CLI Maven lub w Eclipse, musisz włączyć jeden z tych profili. W wierszu poleceń, trzeba uruchomić

mvn czyste pakiet -Pdesenv

w Eclipse (przy założeniu, że używasz dystrybucji Luna Java EE lub nowsza), można włączyć profil, który chcesz naciskając Ctrl+Alt+P. Jeśli włączysz desenv, zobaczysz przefiltrowany plik web.xml pod numerem target/m2e-wtp/web-resources/WEB-INF/ To jest plik, który zostanie opublikowany na serwerze aplikacji.

Jeśli włączysz oba profile jednocześnie, pierwszeństwo ma najnowszy profil podany w pliku pom.xml.

Osobiście usunę profil produkcji i ustawię właściwości produkcji w domyślnej sekcji właściwości pliku pom.xml. W ten sposób zawsze filtrujesz plik web.xml przy użyciu rzeczywistych wartości, a będziesz miał mniejsze szanse na przypadkowe budowanie i wdrażanie aplikacji z ustawieniami nieprodukcyjnymi.

I w celu umożliwienia profil desenv automatycznie w Eclipse, można dodać następującą regułę aktywacji:

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

Więcej na dynamiczny zasób wsparcia filtrowania w m2e-WTP tutaj: https://developer.jboss.org/en/tools/blog/2011/05/03/m2eclipse-wtp-0120-new-noteworthy

a screencast tam: http://screencast.com/t/hwodHqODBB

+1

Jest to bardzo optymalne i racjonalne podejście i wyjaśnienie. Dzięki! –

+1

To był magiczny klucz: "filteringDeploymentDescriptors> true" –

Powiązane problemy