【问题标题】:Maven Resource Filtering with Profile Properties使用配置文件属性进行 Maven 资源过滤
【发布时间】:2016-01-27 12:37:11
【问题描述】:

我有以下 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,除非开发配置文件已激活,否则我希望 Maven 将 ${foo.bar} 替换为 Development

当我运行mvn package 时,它会将值设置为BazBat。很好,资源过滤按预期工作。

但是,当我运行 mvn package -P Development 时,它会将值设置为 BazBat

为了进一步混淆,如果取消注释配置文件上的activation 元素并运行mvn package,它将设置${foo.bar}Development

我什至已经运行 mvn help:active-profiles package 让它输出活动配置文件名称,并且在上述两种情况下,它都表示开发配置文件处于活动状态,但如果没有设置 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 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"

【问题讨论】:

标签: maven maven-profiles maven-resources-plugin


【解决方案1】:

我在 Eclipse 中使用 m2e 运行它时遇到了同样的问题。通过在插件中启用配置文件来解决它: 在 Eclipse 中右键单击您的项目,然后选择 Maven -> 选择 Maven Profiles... 在这里您可以启用开发配置文件

完成此操作后,maven 使用配置文件中设置的属性值过滤了我的资源。我在运行配置中删除了“-P”参数,因为不再需要它。

如果您在 settings.xml 文件中定义并启用配置文件,这也可能有效,但我没有尝试过。

【讨论】:

    【解决方案2】:

    执行时需要去掉 -P 和 development 之间的空格: mvn package -PDevelopment

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      相关资源
      最近更新 更多