在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的见解?
答案 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分钟只能发一个答案: - (
答案 2 :(得分:2)
maven-resources-plugin的最新发布版本(2.4.3)已被破坏。