Maven 3配置文件属性 - 增强还是错误?

时间:2010-11-17 16:48:11

标签: maven-2 maven maven-3

在Maven 2中,我能够设置如下的配置文件属性:

<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会在我的spring bean中替换这些配置值。例如,如果我有一个像这样定义的spring bean:

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

我在构建项目时指定了-P test,Maven会将bean设置为看起来像

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

当我指定-P production时,maven再次用正确的属性

替换了文本
<bean id="cookie-name" class="java.lang.String">
    <constructor-arg value="ProductionCookie"/>
</bean>

随着我们支持的环境和客户数量的增加,我一直在利用这一功能。

我尝试升级到Maven 3,但似乎这种行为已经消失或被破坏。我似乎无法找到被它取代的东西。

任何人都有任何关于如何在保留此行为的同时升级到Maven3的见解?

3 个答案:

答案 0 :(得分:4)

  

我尝试升级到Maven 3,但似乎这种行为已经消失或被破坏。我似乎无法找到被它取代的东西。

资源过滤只适用于Maven 3.鉴于以下项目结构:

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

使用以下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>

beans.xml包含的地方:

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

使用任何配置文件运行maven,例如:

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

产生预期结果:

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

经过测试:

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

如果这不是你得到的,请提供一些允许复制的部分。

答案 1 :(得分:4)

一次只能发布一个链接,而且每3分钟只能发一个答案: - (

http://jira.codehaus.org/browse/MRESOURCES-117

答案 2 :(得分:2)

maven-resources-plugin的最新发布版本(2.4.3)已被破坏。

http://jira.codehaus.org/browse/MRESOURCES-104