Maven 资源过滤 - 显式指定哪些文件需要 属性 注入
Maven resource filtering - Explicitly specify which files require property injection
Maven 资源插件是否允许在注入 Maven 配置文件属性期间灵活地排除某些文件?
- 我不想从汇编中排除文件,只是从注入阶段排除文件。
我正在处理的项目在 Settings.xml 中为每个部署环境定义了唯一的 Maven 配置文件(和相应的属性)。构建项目时,会发生以下步骤
- 项目 POM 将资源文件夹定义为应用资源过滤的目标
- 资源文件夹包含 .XML 和 .PROPERTIES 文件
- 在 mvn:deploy 期间,Maven 按预期将 Profile 属性注入 .PROPERTIES 文件
- Maven 还将 Profile 属性注入到 .XML 文件中。这不是期望的行为(这些文件包含允许项目在应用程序部署期间灵活注入值的占位符)
资源插件提供了配置选项来定义包含和排除选项,但是选择排除选项也会从程序集文件夹中排除不需要的指定文件。
是否可以告诉 Maven 哪些文件应该替换占位符?
您可能正在使用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>
注意 build
部分中的 filters
部分。这里我们告诉 Maven 过滤器在哪里,提供占位符替换。
然后请注意 <filtering>true</filtering>
添加到之后配置的新资源和相关的 includes/excludes 模式。因此,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
现在,如果您的过滤器(文件名)是由配置文件注入的 属性,您可以根据环境注入不同的过滤器,并且只针对特定文件。
Maven 资源插件是否允许在注入 Maven 配置文件属性期间灵活地排除某些文件?
- 我不想从汇编中排除文件,只是从注入阶段排除文件。
我正在处理的项目在 Settings.xml 中为每个部署环境定义了唯一的 Maven 配置文件(和相应的属性)。构建项目时,会发生以下步骤
- 项目 POM 将资源文件夹定义为应用资源过滤的目标
- 资源文件夹包含 .XML 和 .PROPERTIES 文件
- 在 mvn:deploy 期间,Maven 按预期将 Profile 属性注入 .PROPERTIES 文件
- Maven 还将 Profile 属性注入到 .XML 文件中。这不是期望的行为(这些文件包含允许项目在应用程序部署期间灵活注入值的占位符)
资源插件提供了配置选项来定义包含和排除选项,但是选择排除选项也会从程序集文件夹中排除不需要的指定文件。
是否可以告诉 Maven 哪些文件应该替换占位符?
您可能正在使用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>
注意 build
部分中的 filters
部分。这里我们告诉 Maven 过滤器在哪里,提供占位符替换。
然后请注意 <filtering>true</filtering>
添加到之后配置的新资源和相关的 includes/excludes 模式。因此,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
现在,如果您的过滤器(文件名)是由配置文件注入的 属性,您可以根据环境注入不同的过滤器,并且只针对特定文件。