maven使用filter动态配置项目

时间:2022-09-03 21:48:14

maven是一个不错的项目构建工具,关于其基础的用法网上比较多,这里主要记一下有关于filter的相关用法。

1、Filtering

resource标签很多时候可以使用一些变量,使用${...}就可以引用这些变量,这个类似el表达式的东西,可以读取系统属性、配置文件、filter资源文件的属性以及命令行的参数等,可谓相当强大。对于一些项目,打包时可能由于测试环境与生产环境差异过大,这个时候来回的替换相关配置太麻烦,因此使用这个功能可以很便捷的切换项目的某些配置。

比如说我们有一个资源配置文件名叫hello.txt,根据maven的项目结构,将之放置于src/main/resources/hello.txt ,这个文件我们直接配置Hello ${name}这样一个东西

下面是pom.xml

maven使用filter动态配置项目

在上面的pom.xml中,我们可以看到我启用了一个配置<filtering>true</filtering>

接下来运行命令:

maven使用filter动态配置项目

编译成功,我们直接看多了个target文件夹,你会发现,自己在src目录中的hello.txt中的${name}在target中的hello.txt变成了world,也就是说我将pom.xml中配置的name写到了项目的配置文件中,当然这个看起来有点鸡肋,不过这只是filtering我们的重点是filter。

2、filters

maven中有个标签叫做filters,顾名思义这个filters下会有N多个filter标签,在刚刚的pom.xml配置基础上,我们再加上一个配置如下:

<filters><filter>/home/gitlab/maven/testfilter/src/main/resources/my-filter-values.properties</filter></filters>

我懒省事,所以这里写的是绝对路径,可以替换为相对路径,在my-filter-values.properties文件中我们写上以下内容:

maven使用filter动态配置项目

这里请注意,要将pom.xml中引用的${name}去掉,因为这里读取不到name属性,下面是修改后的pom

maven使用filter动态配置项目

我们接着运行命令:

maven使用filter动态配置项目

很显然,我们成功将properties中的变量读取到了hello.txt文件中,很多时候我们希望打包时候不修改配置文件就能适应所有运行环境,试想,我们现在有两个db.properties文件但是有三个部署环境,其中一个是test环境,另一个是预生产环境,还有一个是生产环境,我们每次打包的时候可能都要去修改db.properties容易造成混乱,这个时候我们该怎么办呢?

很简单,我们只需要在输入maven命令时带上自己的参数就行了,比如,我们指定使用哪个配置文件哈哈,这个才是目的,我们拿hello.txt做测试,我们再写一个文件:

maven使用filter动态配置项目

里面输入不同的内容相同的name,然后再修改下pom.xml

maven使用filter动态配置项目

在pom中的filter中将filter文件的文件名使用属性,然后运行命令:

maven使用filter动态配置项目

再来一个:

maven使用filter动态配置项目

OK,完美实现,当然还有很多种方式能够实现这种需求,这里就不一一叙述了,比如我可以定义profile,可以定义多个filter等等等等,选择自己喜欢的方式就ok了。