使用配置文件属性进行Maven资源过滤

9
我有以下的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只需用BazBat替换${foo.bar},除非激活了Development配置文件,然后我希望Maven用Development替换${foo.bar}
当我运行mvn package时,它将值设置为BazBat。很好,资源过滤按预期工作。
但是,当我运行mvn package -P Development时,它将值设置为BazBat
更进一步混淆的是,如果取消注释配置文件上的activation元素并运行mvn package,它将把${foo.bar}设置为Development
我甚至运行mvn help:active-profiles package,使其输出活动配置文件名称,在以上两种情况下,它都说Development配置文件处于活动状态,但是如果不设置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 Files\Java\jdk1.8.0_65\jre
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 Files\Java\jdk1.8.0_65\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "dos"

你解决了吗?我也遇到了同样的问题。请查看https://stackoverflow.com/questions/51186963/value-from-maven-profile-properties-is-not-getting-used-in-properties-file。 - vikramvi
2个回答

0
我在Eclipse中使用m2e运行时遇到了同样的问题。通过在插件中启用配置文件来解决: 右键单击Eclipse中的项目,然后选择Maven -> 选择Maven配置文件... 在这里,您可以启用开发配置文件。
这样做后,maven会使用在配置文件中设置的属性值来过滤我的资源。我从我的运行配置中删除了"-P"参数,因为它不再需要。
如果您在settings.xml文件中定义和启用配置文件,这也可能起作用,但我没有尝试过。

-3

执行以下命令时,需要删除 -P 和 development 之间的空格: mvn package -PDevelopment


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接