全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-23 10 分钟 ✍️ juanwangdev

资源过滤与变量替换

Maven 资源过滤将 POM 属性值替换到资源文件中。

资源过滤配置

启用过滤

XML
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>  <!-- 启用过滤 -->
    </resource>
  </resources>
</build>

变量语法

${property} 语法

properties
# application.properties
app.name=${project.name}
app.version=${project.version}

@property@ 语法(Spring Boot 推荐)

properties
# application.properties
app.name=@project.name@
app.version=@project.version@

语法对比

语法说明
${property}Maven 默认语法
@property@Spring Boot 默认语法

可用变量

项目属性

变量说明
${project.name}项目名称
${project.version}项目版本
${project.artifactId}项目 artifactId
${project.basedir}项目根目录

自定义属性

XML
<properties>
  <app.env>dev</app.env>
  <db.url>jdbc:mysql://localhost:3306/dev</db.url>
</properties>
properties
environment=${app.env}
database.url=${db.url}

系统属性

properties
java.home=${java.home}
user.home=${user.home}

环境变量

properties
java.home=${env.JAVA_HOME}
path=${env.PATH}

多资源配置

不同资源目录

XML
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
    </resource>
    <resource>
      <directory>src/main/config</directory>
      <filtering>true</filtering>
    </resource>
  </resources>
</build>

二进制文件排除

避免过滤二进制文件

XML
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
      <excludes>
        <exclude>**/*.jpg</exclude>
        <exclude>**/*.png</exclude>
        <exclude>**/*.pdf</exclude>
      </excludes>
    </resource>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>false</filtering>
      <includes>
        <include>**/*.jpg</include>
        <include>**/*.png</include>
      </includes>
    </resource>
  </resources>
</build>

nonFilteredFileExtensions

XML
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-resources-plugin</artifactId>
  <configuration>
    <nonFilteredFileExtensions>
      <extension>jpg</extension>
      <extension>png</extension>
      <extension>pdf</extension>
      <extension>zip</extension>
    </nonFilteredFileExtensions>
  </configuration>
</plugin>

Profile 环境配置

多环境配置

XML
<profiles>
  <profile>
    <id>dev</id>
    <properties>
      <db.url>jdbc:mysql://localhost:3306/dev</db.url>
      <db.user>dev</db.user>
    </properties>
  </profile>
  <profile>
    <id>prod</id>
    <properties>
      <db.url>jdbc:mysql://prod-server:3306/prod</db.url>
      <db.user>prod</db.user>
    </properties>
  </profile>
</profiles>
properties
database.url=${db.url}
database.user=${db.user}

执行

Bash
mvn package -Pdev
mvn package -Pprod

Spring Boot 配置

Spring Boot 默认配置

XML
<build>
  <resources>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>true</filtering>
      <includes>
        <include>application.properties</include>
        <include>application-*.properties</include>
      </includes>
    </resource>
    <resource>
      <directory>src/main/resources</directory>
      <filtering>false</filtering>
      <excludes>
        <exclude>application.properties</exclude>
        <exclude>application-*.properties</exclude>
      </excludes>
    </resource>
  </resources>
</build>

application.properties 示例

properties
app.name=@project.name@
app.version=@project.version@
app.description=@project.description@

XML 文件过滤

XML 文件使用变量

XML
<!-- config.xml -->
<configuration>
  <version>${project.version}</version>
  <name>${project.name}</name>
</configuration>

YAML 文件过滤

YAML 文件注意事项

YAML 文件过滤需谨慎,避免格式被破坏:

YAML
# application.yml
app:
  name: "@project.name@"
  version: "@project.version@"

YAML 使用引号包裹变量,避免格式问题。

测试资源过滤

XML
<build>
  <testResources>
    <testResource>
      <directory>src/test/resources</directory>
      <filtering>true</filtering>
    </testResource>
  </testResources>
</build>

验证过滤结果

查看输出文件

Bash
cat target/classes/application.properties

过滤后内容

text
app.name=My Application
app.version=1.0.0
environment=dev

要点总结

  • filtering=true 启用资源过滤
  • ${property} 或 @property@ 替换变量
  • 项目属性、自定义属性、系统属性可用
  • 二进制文件需排除过滤
  • Profile 配合实现多环境配置
  • Spring Boot 推荐 @property@ 语法
  • YAML 文件使用引号包裹变量

📝 发现内容有误?点击此处直接编辑

← 上一篇 编译配置与 Java 版本
下一篇 → Profile 基础与激活方式
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库