2010-11-17 18 views
3

Maven 2, j'ai pu définir les propriétés profil comme celles-ci:Propriétés du profil Maven 3 - amélioration ou bug?

<profiles> 
    <profile> 
     <id>test</id> 
     <properties> 
      <region>test</region> 
      <application-url>http://localhost:8080/myTestApp</application-url> 
      <cookie-name>TestCookie</cookie-name> 
     </properties> 
    </profile> 

    <profile> 
     <id>production</id> 
     <properties> 
      <region>production</region> 
      <application-url>http://prodserver/myProductionApp</application-url> 
      <cookie-name>ProductionCookie</cookie-name> 
     </properties> 
    </profile> 
<profiles> 

à Maven compilation remplacerait ces valeurs de configuration dans mes grains de printemps. Par exemple, si j'avais un grain de printemps défini comme ceci:

<bean id="cookie-name" class="java.lang.String"> 
    <constructor-arg value="${cookie-name}"/> 
</bean> 

et je spécifié -P test quand je construis le projet, Maven fixerait l'ensemble de la fève à ressembler

<bean id="cookie-name" class="java.lang.String"> 
    <constructor-arg value="TestCookie"/> 
</bean> 

et quand je spécifié -P production, maven à nouveau remplacé le texte avec la propriété correcte

<bean id="cookie-name" class="java.lang.String"> 
    <constructor-arg value="ProductionCookie"/> 
</bean> 

Comme le nombre d'environnements et les clients que nous soutenons a augmenté, je suis en profitant davantage de cette fonctionnalité.

J'ai essayé de mettre à niveau vers Maven 3, mais il semble que ce comportement a disparu ou est cassé. Je n'arrive pas à trouver ce qu'il a remplacé.

Quelqu'un at-il des idées sur comment ou si je peux passer à Maven3 tout en préservant ce comportement?

+0

Avez-vous défini les profils dans la pom ou dans le fichier profiles.xml ? – khmarbaise

+0

Je définis les profils directement dans le POM. – Vinnie

Répondre

4

J'ai essayé de mettre à niveau vers Maven 3, mais il semble que ce comportement a disparu ou est cassé. Je n'arrive pas à trouver ce qu'il a remplacé.

Ressources filtrage fonctionne très bien avec Maven 3. Compte tenu de la structure suivante du projet:

 
. 
├── pom.xml 
└── src 
    ├── main 
    │   ├── java 
    │   │   └── com 
    │   │    └── stackoverflow 
    │   │     └── App.java 
    │   └── resources 
    │    └── beans.xml 
    └── test 
     └── java 
      └── com 
       └── stackoverflow 
        └── AppTest.java 

avec ce qui suit pom.xml:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.stackoverflow</groupId> 
    <artifactId>Q4206883</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    ... 
    <build> 
    <resources> 
     <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
     </resource> 
    </resources> 
    </build> 
    <profiles> 
    <profile> 
     <id>test</id> 
     <properties> 
     <region>test</region> 
     <application-url>http://localhost:8080/myTestApp</application-url> 
     <cookie-name>TestCookie</cookie-name> 
     </properties> 
    </profile> 
    <profile> 
     <id>production</id> 
     <properties> 
     <region>production</region> 
     <application-url>http://prodserver/myProductionApp</application-url> 
     <cookie-name>ProductionCookie</cookie-name> 
     </properties> 
    </profile> 
    </profiles> 
</project> 

Et où beans.xml contient:

<bean id="cookie-name" class="java.lang.String"> 
    <constructor-arg value="${cookie-name}"/> 
</bean> 

Courir maven avec l'un des profils par exemple:

 
$ mvn -P test process-resources 
[INFO] Scanning for projects... 
... 

produit le résultat escompté:

$ cat target/classes/beans.xml 
<bean id="cookie-name" class="java.lang.String"> 
    <constructor-arg value="TestCookie"/> 
</bean> 

Testé avec:

 
$ mvn --version 
Apache Maven 3.0 (r1004208; 2010-10-04 13:50:56+0200) 
Java version: 1.6.0_22 
Java home: /usr/lib/jvm/java-6-sun-1.6.0.22/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "linux" version: "2.6.35-22-generic" arch: "i386" Family: "unix" 

Si ce n'est pas ce que vous obtenez, s'il vous plaît fournir quelques pièces permettant de reproduire.