2014-12-19 23 views
5

Sto lavorando a un progetto Web Maven tramite Eclipse. Nel web.xml, ho un context-param che valore dovrebbe cambiare in base al profilo che utilizzo quando eseguo il Maven.Maven: come compilare una variabile nel file web.xml

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

Nel file di pom per il progetto che ho la seguente configurazione:

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

Sto usando sia resources tag come Maven-guerra-plugin plug in base ai riferimenti che ho trovato su internet. Tuttavia, non ha funzionato come previsto. In Eclipse eseguo il Maven con gli obiettivi clean install e come "Profili" sia prod o desenv. Dopo aver eseguito il Maven, ho osservato che nello web.xml la proprietà ${ambiente.producao} non è stata sostituita. Pertanto, vorrei sapere cosa ho sbagliato. Dovrei usare solo la risorsa Filtering o il plugin maven-war?

Grazie,

Rafael Afonso

risposta

16

Non credere a tutto quello che leggete su Internet. È necessario rimuovere src/main/webapp/WEB-INF/dalla lista delle risorse, sarà solo filtrare la web.xml per target/classes

La configurazione maven-war-plugin ha solo bisogno:

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

Ora, se si costruisce in Maven CLI o all'interno di Eclipse, è necessario abilitare uno di questi profili. In linea di comando, è necessario eseguire pacchetto pulito

mvn -Pdesenv

In Eclipse (supponendo che si sta utilizzando la distribuzione Luna Java EE o più recente), è possibile attivare il profilo desiderato premendo Ctrl+Alt+P. Se abiliti desenv, vedrai il file web.xml filtrato sotto target/m2e-wtp/web-resources/WEB-INF/ Questo è il file che verrà pubblicato sul server delle applicazioni.

Se si abilitano entrambi i profili contemporaneamente, l'ultimo profilo elencato nel pom.xml ha la precedenza.

Personalmente, rimuoverei il profilo di produzione e inserisco le proprietà di produzione nella sezione delle proprietà predefinite di pom.xml. In questo modo, filtri sempre il tuo web.xml con valori effettivi e avrai meno possibilità di creare e distribuire accidentalmente la tua app con impostazioni non di produzione.

E al fine di consentire automaticamente il profilo desenv in Eclipse, è possibile aggiungere la seguente regola di attivazione:

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

Altro su dinamica delle risorse filtraggio sostegno M2E-WTP qui: https://developer.jboss.org/en/tools/blog/2011/05/03/m2eclipse-wtp-0120-new-noteworthy

E un screencast: http://screencast.com/t/hwodHqODBB

+1

Questo è un approccio e una spiegazione molto ottimali e razionali. Grazie! –

+1

Questa era una chiave magica: "filteringDeploymentDescriptors> true" –