2013-04-26 8 views
6

ho di nuovo da Maven e sto cercando di creare pom.xml per creare i file di guerra per l'ambiente utilizzando diversi profiliCome posso creare un profilo build Maven per copiare i file in modo condizionale?

Così ho creato il target di compilazione

<build> 
<finalName>myacct_okc</finalName> 
<resources> 
    <resource> 
    <directory>src/main/java</directory> 
    <excludes> 
     <exclude>**/*.java</exclude> 
    </excludes> 
    </resource> 
    <resource> 
    <directory>src/main/resources</directory> 
    </resource> 
    <resource> 
    <directory>config/${environment}</directory> 
    </resource> 
</resources> 
</build> 

E poi creato i profili per ogni ambiente

<profiles> 
<profile> 
    <id>local</id> 
    <activation> 
    <activeByDefault>false</activeByDefault> 
    </activation> 
    <properties> 
    <environment>local</environment> 
    </properties> 
</profile> 
<profile> 
    <id>jboss</id> 
    <properties> 
    <environment>jboss</environment> 
    </properties> 
</profile> 
<profile> 
    <id>dev</id> 
    <properties> 
    <environment>dev</environment> 
    </properties> 
</profile> 

e creo una cartella config per ogni ENV

0.123.
project root 
|-- src 
| |-- main 
| | |-- java 
| | |-- resources 
| | | |-- config.xml 
| | | +-- config.properties 
| | |-- webapp 
| | | |-- META-INF 
| | | | +--context.xml 
| | |-- config 
| | | |-- local 
| | | | |--config.properties 
| | | | +--config.xml 
| | | |-- jboss 
| | | | |--config.properties 
| | | | +--config.xml 
| | | +-- dev 
| | | | |--config.properties 
| | | | +--config.xml 
+--pom.xml 

Ora quando eseguo questo pom.xml con qualsiasi profilo per es. jboss, i file della cartella config/jboss non vengono copiati (o intendo che i file in src/main/resources non vengono sostituiti).

quando ho abilitato il debug on su build maven posso vedere la copia che viene eseguita.

[DEBUG] resource with targetPath null 
directory C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss 
excludes [] 
includes [] 
[DEBUG] ignoreDelta true 
[INFO] Copying 2 resources 
[DEBUG] file config.xml has a filtered file extension 
[DEBUG] copy C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss\config.xml to C:\Projects\workspace\myaccount_build_4\myaccount\target\classes\config.xml 
[DEBUG] file config.properties has a filtered file extension 
[DEBUG] copy C:\Projects\workspace\myaccount_build_4\myaccount\config\jboss\META-INF\config.properties to C:\Projects\workspace\myaccount_build_4\myaccount\target\classes\META-INF\config.properties 

Ma non sta sostituendo i file. I file sono sempre gli stessi di src/main/resources.

versione

Maven è 3.0.4

Qualcuno mi può aiutare quello che sto facendo male?

Ho visto questo question. Questo fornisce una soluzione, ma voglio sovrascrivere i file piuttosto che escluderli e quindi copiare.

+0

Questo è un altro esempio di base da Maven: http://maven.apache.org/guides/mini/guide-building-for-different- environments.html – Lunf

risposta

6

Ha funzionato dopo ho aggiunto filtering= true

<build> 
<finalName>myacct_okc</finalName> 
<resources> 
<resource> 
    <directory>src/main/java</directory> 
    <excludes> 
    <exclude>**/*.java</exclude> 
    </excludes> 
</resource> 
<resource> 
    <filtering>true</filtering> 
    <directory>src/main/resources</directory> 
</resource> 
    <resource> 
    <filtering>true</filtering> 
    <directory>config/${environment}</directory> 
    </resource> 
    </resources> 
</build> 
+5

sostituisce $ (qualcosa) in file con valori di proprietà maven –

7

Credo che dovrai aggiungere le tue risorse al plugin maven-resources, all'interno di un'esecuzione di copia-risorse.

<plugin> 
    <artifactId>maven-resources-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>copy-config</id> 
     <phase>copy-resources</phase> 
     <goals> 
     <goal>copy-resources</goal> 
     </goals> 
     <configuration> 
     <outputDirectory>${project.build.outputDirectory}</outputDirectory> 
     <resources> 
      <resource> 
      <directory>src/main/java</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
      </resource> 
      <resource> 
      <directory>src/main/resources</directory> 
      </resource> 
      <resource> 
      <directory>config/${environment}</directory> 
      </resource> 
     </resources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
+0

non stiamo usando il plugin maven-resources – NullPointerException

+4

Potresti non utilizzarlo esplicitamente nel tuo POM, ma è un plugin Maven di base ed è implicitamente utilizzato durante il ciclo di vita della build. La configurazione del plug-in è un modo per ottenere il plug-in per copiare le risorse dalle posizioni di origine personalizzate. – bdkosher

+0

salva vita assoluta! Stavo pensando a questo in termini di ridenominazione in base al profilo, ma non riuscivo a capire come farlo. Questo è molto più elegante. Grazie il filtro –

Problemi correlati