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 有任何见解吗?

4

3 回答 3

4

一次只能发布 1 个链接,显然每 3 分钟只有一个答案:-(

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

于 2010-12-15T22:53:00.240 回答
4

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

资源过滤在 Maven 3 中工作得很好。给定以下项目结构:

.
├── pom.xml
└── 源
    ├── 主要
    │ ├── java
    │ │ └── com
    │ │ └── stackoverflow
    │ │ └── App.java
    │ └── 资源
    │ └── beans.xml
    └── 测试
        └── java
            └── com
                └── 堆栈溢出
                    └── 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 测试进程资源
[INFO] 正在扫描项目...
...

产生预期的结果:

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

经测试:

$ mvn --版本
阿帕奇 Maven 3.0 (r1004208; 2010-10-04 13:50:56+0200)
Java版本:1.6.0_22
Java 主页:/usr/lib/jvm/java-6-sun-1.6.0.22/jre
默认语言环境:en_US,平台编码:UTF-8
操作系统名称:“linux”版本:“2.6.35-22-generic”arch:“i386”系列:“unix”

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

于 2010-11-18T21:01:27.297 回答
2

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

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

于 2010-12-15T22:29:57.527 回答