Maven资源过滤 - 明确指定哪些文件需要属性注入

时间:2015-12-04 10:22:54

标签: maven maven-3 pom.xml maven-profiles maven-resources-plugin

Maven资源插件是否允许在注入Maven配置文件属性期间灵活地排除某些文件?

  • 我不想从汇编中排除文件,只是从注入阶段开始。

我正在开发的项目在Settings.xml中为每个部署环境定义了唯一的Maven配置文件(和相应的属性)。构建项目时,会发生以下步骤

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

资源插件提供了用于定义包含和排除选项的配置选项,但是选择exclude选项也会从程序集文件夹中排除不需要的指定文件。

是否可以告诉Maven哪些文件应该替换占位符?

1 个答案:

答案 0 :(得分:3)

您可能正在使用filters机制,您可以决定是将其应用于某个文件夹以及应将哪个过滤器应用于该文件夹。

给出以下样本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 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>

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

请注意,之后配置的新资源的<filtering>true</filtering>添加以及相关的包含/排除模式。因此,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

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

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

现在,如果您的过滤器(文件名)是配置文件注入的属性,则可以根据环境注入不同的过滤器,并仅定位特定文件。