resource插件 资源文件处理
maven-resource-plugin是Maven的核心插件之一,主要功能包括复制资源文件到编译输出的包中,以及替换(filter操作)资源文件中的占位符。这篇笔记我们简单介绍该插件的用法。
指定资源文件路径
我们知道Maven工程中默认的资源文件路径为src/main/resources。实际上,我们也可以手动给resource插件指定一个自定义的资源文件路径,下面是一个例子。
<build>
<resources>
<resource>
<directory>myres</directory>
</resource>
</resources>
</build>
配置中指定了项目根路径/myres为资源路径,这会覆盖默认的项目根路径/src/main/resources路径。<resources>是一个数组,因此它也支持指定多个资源路径。不过实际上,手动指定资源路径的情况比较罕见,一般是工程结构比较特殊的情况才会遇到。
基于属性定义替换占位符
resource插件最常用的功能是替换资源文件中的占位符。我们可以在pom.xml的属性配置中定义任意的属性键值对,比如下面我们定义了param1=abc123。
<properties>
<param1>abc123</param1>
</properties>
默认情况下,resource插件不会执行替换,开启该功能需要我们手动指定filtering属性为true。
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
我们在src/main/resources内有如下资源文件,其中使用了${}写法的占位符。
hello, ${param1}!
编译构建后,该文件的内容就会被替换为hello, abc123!。
基于配置文件替换占位符
上面例子中我们基于<properties>定义了属性,实际上我们也可以基于配置文件定义属性,下面是一个例子,我们的配置文件src/main/resources/params.properties中定义了一个键值对信息。
param2=cba321
我们如下配置pom.xml即可引用其中配置的属性执行替换。
<build>
<filters>
<filter>src/main/resources/params.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
资源文件中的${param2}都会被替换为文本cba321。
替换操作的包括和排除
实际开发中经常遇到这样的问题:我们需要替换src/main/resources下除了某文件以外的所有文件(该文件可能是一个密钥,其中内容可能意外的会触发resource插件的占位符替换,我们不希望如此)。这该如何实现呢?假设我们要排除的文件名为key.dat.txt,最佳实践配置如下。
<build>
<filters>
<filter>src/main/resources/params.properties</filter>
</filters>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>key.dat.txt</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>key.dat.txt</include>
</includes>
</resource>
</resources>
</build>