资源过滤与变量替换
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 文件使用引号包裹变量
📝 发现内容有误?点击此处直接编辑