Java - Maven中pom文件的filtering作用

MAVEN提供了一种过滤机制,这种机制能够在资源文件被复制到目标目录的同时,当filtering = true时替换资源文件中的占位符;当filtering = false时不进行占位符的替换

filtering是用来声明 是否开启配置文件的变量替换规则。默认为false,只有在一个公共配置文件+多个环境变量替换配置文件方式下才有效,如果是我这种在不同环境的文件夹名称下各有各的公共配置文件的话,是完全不需要管这个参数的

开启方式如下,在pom.xml文件添加如下配置:

XML 复制代码
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

Maven通过filtering标签读取变量配置的三种方法

1、读取资源文件读取 pom文件标签属性变量值

XML 复制代码
<project>
    <name>HelloWorld</name>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

filtering:开启过滤,用指定的参数替换directory下的文件中的参数(eg. ${name})

directory:指定资源文件的位置

常见在pom.xml文件中设置一些版本号,使用变量占位符替换

XML 复制代码
    <properties>
        <java.version>11</java.version>
        <!-- Environment Settings -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!-- 1.18.18 -->
        <lombok.version>1.18.20</lombok.version>
    </properties>

使用:

XML 复制代码
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <!-- <source>11</source> -->
                    <source>${java.version}</source>
                    <!-- <target>11</target> -->
                    <target>${java.version}</target>
                </configuration>
            </plugin>

测试在src/main/resources下,添加一个文件,比如叫test.txt。test.txt内容如下:

I want to say : ${name}

3.执行 mvn resources:resources 命令,最后会在target/classes下看到test.txt的内容变成了,如下所示:

I want to say : HelloWorld

2、读取资源文件读取 读取 pom文件 properties 变量属性下 标变量值

XML 复制代码
<project>
    <name>HelloWorld</name>
    <properties>
        <username>admin</username>
    </properties>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

然后在test.txt,添加一句:

Login username is:${username}

3、通过 filters 标签 预编译资源文件,进行读取properties文件变量值

XML 复制代码
<project>
    <filters>
        <filter>src/main/resources/code.properties</filter>
    </filters>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
</project>

在src/main/resources下添加文件code.properties

该文件内容如下:

XML 复制代码
username = admin
password = admin123

然后测试test.txt,添加如:{username1} {password},执行步骤3,也会得到同样的效果

相关推荐
数据皮皮侠AI1 天前
上市公司耐心资本数据(2010-2025)
大数据·人工智能·笔记·能源·1024程序员节
蹉跎岁月新2 天前
Jenkins创建一个maven-project
运维·jenkins·maven
MaCa .BaKa2 天前
56-非遗手工艺品定制平台系统
java·vue.js·spring boot·mysql·maven·非遗手工制作平台系统·非遗制作
weixin_489690023 天前
【IDEA 2025.2.4】 Maven 仅能手动 Reload All Maven Projects 问题解决
java·maven·intellij-idea
MaCa .BaKa3 天前
55-宠物爱心救助领养系统-宠物救助领养系统
java·vue.js·tomcat·maven·springboot·宠物救助领养系统
摇滚侠3 天前
我把一个依赖安装到了本地仓库,但是IDEA 刷新 maven 提示远程私服仓库找不到,怎么解决
java·maven·intellij-idea
霸道流氓气质3 天前
在Qoder中指定JDK和Maven运行AI学习的SpringBoot项目的完整指南
java·人工智能·maven
开开心心就好3 天前
解决图片无页码添加功能的实用工具
javascript·python·安全·智能手机·pdf·音视频·1024程序员节
小江的记录本3 天前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
我是一只码蚁4 天前
记一次苍穹外卖项目 Maven 编译报错的排查与解决全过程
java·经验分享·笔记·后端·架构·maven