当前位置: 首页 > 知识库问答 >
问题:

使用配置文件属性进行Maven资源筛选

邓令雪
2023-03-14

我有以下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>

注意,配置文件上的激活元素被注释掉了

src/main//application.properties中还有以下内容

myproperty=${foo.bar}

因此,我希望Maven做的只是用Bazbat替换${foo.bar},除非开发配置文件被激活,否则我希望Maven用Development替换${foo.bar}

当我运行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"

共有1个答案

曾飞雨
2023-03-14

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

在我这样做之后,maven使用配置文件中设置的属性值过滤我的资源。我删除了运行配置中的“-p”参数,因为不再需要这个参数。

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

 类似资料:
  • 我正在尝试使用maven配置文件实例化hibernate配置文件。我的配置文件位于下,在pom文件中,我标记了该文件夹以用于资源过滤。有趣的是,我可以从属性文件中加载相同的属性,而hibernate在解析配置文件时抛出异常。这是我正在使用的代码示例。 POM-资源筛选 文件结构 资源hibernate.cfg.xml

  • 我有这个pom结构,我正在尝试访问属性。我无法通过另一个属性中心的资源筛选访问此内容。端口,在属性部分中定义 在中,我有属性文件,它有这个 我就像这样进入财产 但它会打印 <代码>轮毂${集线器端口} 我提到了这个问题,但我无法访问该物业。

  • 我有一个SpringBoot项目(maven/java8)。 我想通过Maven配置文件(dev.properties|prod.properties)过滤src/main/Resources/application.properties中的一些自定义变量 Maven命令: 应用属性: 开发属性: prod.properties: pom.xml:

  • 我正在运行一个简单的maven项目(Maven3.3.9),其中包含配置文件和资源筛选。似乎总是在默认配置文件上进行筛选。 src/main/filters(默认)中有两个配置文件:config-dev.properties和config-prod.properties(仅包含一个变量application.env=development application.env=production 和s

  • 我正在尝试将我的应用程序配置为具有两个构建配置文件:开发和生产。为此,我在src/main/resources文件夹下创建了两个子目录:src/main/resources/development和src/main/resources/production。每个子目录都有自己的。属性文件。 我使用命令mvn install-P${profile_here}构建应用程序 Maven将与所选配置文件相

  • Maven resources插件是否允许在注入Maven profile属性期间灵活地排除某些文件? 我不想从程序集中排除文件,只是从注入阶段排除文件。 我正在处理的项目在settings.xml中为每个部署环境定义了唯一的Maven配置文件(和相应的属性)。在生成项目时,将执行以下步骤 项目POM将资源文件夹定义为应用资源筛选的目标 资源文件夹包含.xml和.properties文件 在mvn