2015-12-16 16 views
5

Ho Maven app con 3 diversi profili, di seguito specificatoQual è il modo corretto per sostituire i file in Maven?

<profiles> 
     <profile> 
      <id>dev</id> 
      <properties> 
       <profileVersion>DEV</profileVersion> 
       <webXmlFolder>${id}</webXmlFolder> 
      </properties> 
     </profile> 

     <profile> 
      <id>test</id> 
      <properties> 
       <profileVersion>1.0.0-RC1</profileVersion> 
       <webXmlFolder>${id}</webXmlFolder> 
      </properties> 
     </profile> 

     <profile> 
      <id>prod</id> 
      <properties> 
       <profileVersion>1.0.0-Final</profileVersion> 
       <webXmlFolder>${id}</webXmlFolder> 
      </properties> 
     </profile> 
    </profiles> 

E devo struttura Maven come questa:

src/main/config/default/WEB-INF/web.xml

src///config/test/WEB-INF/web.xml principale/config/dev/WEB-INF/web.xml

src principale

src/main/config/prod/WEB-INF/web.xml

src/main/webapp/WEB-INF/

Il mio compito è quello di impostare nominato web.xml in webapp/WEB- INF durante la costruzione, dipende dal profilo specificato. Se nessun profilo è specificato, allora web.xml sta copiando dalla cartella predefinita.

Ho un plugin, ma non funziona.

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <id>copy-prod-resources</id> 
        <phase>process-resources</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <overwrite>true</overwrite> 
         <outputDirectory>${project.build.outputDirectory}/classes/WEB-INF</outputDirectory> 
         <resources> 
          <resource> 
           <directory>src/main/config/${webXmlfolder}/WEB-INF</directory> 
           <filtering>true</filtering> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Qualche idea? Ho passato molto tempo con quel problema e sono un po 'confuso ora.

+2

tutti i profili definiti si basano sulla proprietà $ {id}, è definita nel resto del POM? –

+0

Il mio errore era che $ {id} valore segnaposto era il nome completo dell'app definita come [groupId: artifactId: version] invece solo il nome id del profilo. :) –

risposta

3

Ok, tutto funziona ora. Ecco il mio codice finale, che funziona:

<properties> 
    <webXmlFolder>default</webXmlFolder> 
    <profileVersion>defaultVersion</profileVersion> 
</properties> 

<profiles> 
    <profile> 
     <id>dev</id> 
     <properties> 
      <profileVersion>DEV</profileVersion> 
      <webXmlFolder>dev</webXmlFolder> 
     </properties> 
    </profile> 

    <profile> 
     <id>test</id> 
     <properties> 
      <profileVersion>1.0.0-RC1</profileVersion> 
      <webXmlFolder>test</webXmlFolder> 
     </properties> 
    </profile> 

    <profile> 
     <id>prod</id> 
     <properties> 
      <profileVersion>1.0.0-Final</profileVersion> 
      <webXmlFolder>prod</webXmlFolder> 
     </properties> 
    </profile> 
</profiles> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.4</version> 
      <executions> 
       <execution> 
        <id>copy-web.xml</id> 
        <phase>package</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <overwrite>true</overwrite> 
         <outputDirectory>${basedir}/target/classes/WEB-INF</outputDirectory> 
         <resources> 
          <resource> 
           <directory>src/main/config/${webXmlFolder}/WEB-INF</directory> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
+0

ho una domanda come fare quando il file di web.xml cambia? esempi: 'web.dev.xml'' web.preprod.xml' 'web.prod.xml' – Mercer

+0

'mvn clean install -P dev' - questo comando digitato nella console avvia Maven Lifecycle con il profilo dev. È possibile specificare il profilo per "-P profilo". –

+1

Grazie per aver postato la tua soluzione! –

Problemi correlati