我有以下pom.xml:
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mycompany</groupId>
<artifactId>resource-fail</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<foo.bar>BazBat</foo.bar>
</properties>
<build>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
<profiles>
<profile>
<id>Development</id>
<!--
<activation>
<activeByDefault>true</activeByDefault>
</activation>
-->
<properties>
<foo.bar>Development</foo.bar>
</properties>
</profile>
</profiles>
</project>
注意,profile
上的activation
元素已注释掉
我在src/main/java/application.properties
中也有以下内容
myproperty=${foo.bar}
因此,我希望Maven只需将${foo.bar}
替换为BazBat
,除非开发概要文件处于活动状态,否则我希望Mavin用Development
替换${foo.bar}
当我运行mvn package
时,它会将值设置为BazBat
。很好,资源筛选工作正常。
但是,当我运行mvn package -P Development
时,它会将值设置为BazBat
为了进一步混淆,如果取消对配置文件上的activation
元素的注释并运行mvn package
,它将把${foo.bar}
设置为Development
我甚至运行了mvn help:active-profiles package
,让它输出活动概要文件名称,在上面的两种情况下,它都表示Development概要文件是活动的,但如果没有设置activeByDefault
标志,过滤仍然无法工作。
综上所述:
- 如果配置文件是
activeByDefault
,Maven会使用配置文件中的值正确覆盖属性 - 如果我通过命令行开关激活配置文件,Maven不会覆盖属性
发生了什么事?
我的环境:
> mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T11:29:23-06:00)
Maven home: C:apache-maven-3.2.5
Java version: 1.8.0_65, vendor: Oracle Corporation
Java home: C:Program FilesJavajdk1.8.0_65jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
更新:我已经升级到最新的maven(3.3.3)-问题仍然存在。我的新环境:
> mvn -version
Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T06:57:37-05:00)
Maven home: C:apache-maven-3.3.3
Java version: 1.8.0_65, vendor: Oracle Corporation
Java home: C:Program FilesJavajdk1.8.0_65jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"
我在Eclipse中使用m2e运行此程序时遇到了同样的问题。通过在插件中启用配置文件解决了这个问题:右键单击Eclipse中的项目,然后选择Maven->SelectMavenProfiles。。。在这里,您可以启用开发配置文件
完成此操作后,maven使用配置文件中设置的属性值过滤我的资源。我删除了运行配置中的"-P"参数,因为不再需要它了。
如果您在settings.xml文件中定义并启用配置文件,这也可能有效,但我没有尝试。
执行以下操作时,需要删除-p和开发之间的空格:mvn包-PDevelopment