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>
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。