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

Maven资源筛选-显式指定哪些文件需要属性注入

艾学海
2023-03-14

Maven resources插件是否允许在注入Maven profile属性期间灵活地排除某些文件?

  • 我不想从程序集中排除文件,只是从注入阶段排除文件。

我正在处理的项目在settings.xml中为每个部署环境定义了唯一的Maven配置文件(和相应的属性)。在生成项目时,将执行以下步骤

  • 项目POM将资源文件夹定义为应用资源筛选的目标
  • 资源文件夹包含.xml和.properties文件
  • 在mvn:deploy期间,Maven按预期将配置文件属性注入.properties文件
  • Maven还将配置文件属性注入到.xml文件中。这不是所希望的行为(这些文件包含占位符,允许项目在应用程序部署期间灵活地注入值)

资源插件提供了定义include和exclude选项的配置选项,但是选择exclude选项也会将指定的文件从assembly文件夹中排除,这是不需要的。

有可能告诉Maven哪些文件应该替换占位符吗?

共有1个答案

秦珂
2023-03-14

您可能正在使用筛选器机制,对于该机制,您可以决定是否将其应用到某个文件夹,以及应该将哪个筛选器应用到该文件夹。

给定以下POM示例:

<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 html" target="_blank">http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.sample</groupId>
    <artifactId>resources-example</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <filters>
            <filter>src/main/filters/filter.properties</filter>
        </filters>

        <resources>
            <!-- configuring an additional resources folder: conf -->
            <resource>
                <directory>${project.basedir}/src/main/conf</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>*.txt</exclude>
                </excludes>
                <includes>
                    <include>*.properties</include>
                </includes>
                <targetPath>${project.basedir}/target</targetPath>
            </resource>
        </resources>
    </build>
</project>

请注意build部分中的filters部分。这里我们告诉Maven过滤器的位置,提供占位符替换。

请注意,随后配置的新资源中的 true 添加和相关的包含/排除模式。因此,Maven将只过滤该文件夹的*.properties文件。

现在,src/main/conf可以包含具有以下内容的conf.properties文件:

## add some properties here
property.example=@property.value1@
property.example2=${property.value2}

(注意ant和maven样式的占位符。)

而src/main/filters(您需要创建此文件夹)包含具有以下内容的filter.properties文件:

property.value1=filtered-value1
property.value2=filtered-value2

运行生成,您将在target目录中获得conf.properties文件,其中包含以下内容:

property.example=filtered-value1
property.example2=filtered-value2

现在,如果您的筛选器(文件名)是一个配置文件注入的属性,那么您可以根据环境注入不同的筛选器,并且只针对某些文件。

 类似资料:
  • 我有以下pom.xml: 注意,上的元素被注释掉了 在中还有以下内容 因此,我希望Maven做的只是用替换,除非开发配置文件被激活,否则我希望Maven用替换 当我运行时,它将值设置为。很好,资源筛选工作正常。 但是,当我运行时,它将值设置为 如果取消对配置文件上的元素的注释并运行,则会将设置为 我甚至运行了让它输出活动的配置文件名称,并且在上面的两种情况下,它都表示开发配置文件是活动的,但是如果

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

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

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

  • 这有点让人抓狂,在与Maven合作的几年里,我从未见过这种情况发生。一个简单的项目(不是我自己写的)会随机失败过滤资源,我不知道是什么导致了它。我不能共享项目源代码,但我会尽可能多地共享POM。请记住,问题不在于代码,而在于Maven随机决定不过滤资源。 我最初在POM的build标签中配置了这个: 在我的src/main/资源目录中,我有一个名为spring-config.xml.的文件。这个文

  • 在新的Laravel资源类中,您可以根据自己喜欢的任何内容删除属性。 如果您想返回许多项目,您可以使用该功能 但这不允许您在一个位置添加元数据。输入一个集合,太好了,这是一个很好的格式,能够添加元数据的许多项目。但是,您不能做的是筛选集合,您必须像使用资源一样隐藏属性。我能看到的唯一办法就是 我是不是错过了什么?对于资源收集来说,这似乎是一个被忽视的巨大能力