一、简介
更详细总结参考: resource插件理解
- 各goal的作用
resource:resource
将main代码的resources拷贝到main.output.directory,具体是project.build.outputDirectory
默认在maven的process-resources
周期执行
resources:testResources
将test代码的resources拷贝到test.output.directory,具体是project.build.testOutputDirectory
默认在maven的process-test-resources
周期执行
resources:copy-resources
资源拷贝,需要指定资源位置和目标位置
mvn resources:help -Ddetail=true
查看resources插件的使用介绍
- 变量替换时的分隔符定义
格式为beginToken*endToken
, 如果beginToken和endToken一样,可以缩写为tokentoken
或token
默认分隔符定义如下
<delimiters>
<delimiter>${*}</delimiter>
<delimiter>@</delimiter>
</delimiters>
可以在project.properties和resource-plugin的configuration里配置
- 指定resource时的编码
在project.properties或resources插件的configuration里配置
{project.build.sourceEncoding}
- filters的作用及组成
resources.resources.filters.filter设置,作用是用来替换变量时作为变量定义源
filters文件包括: 显式在filer定义的文件、SystemProperties、project.properties
<build>
<filters>
<filter>src/main/config/${running.env}/zookeeper.properties</filter>
<filter>src/main/config/${running.env}/xdcs.properties</filter>
<filter>src/main/config/${running.env}/maven-test.properties</filter>
<filter>src/main/config/${running.env}/web.properties</filter>
</filters>
</build>
- include和exclusion使用注意事项
指定resource时,默认包含directory
的所有资源,即**/*.*
如果仅部分需要当成resource,通过include和exclusion来指定
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application.properties</include>
</includes>
<filtering>true</filtering>
</resource>
二、使用场景
- maven默认周期resources的处理
resources:resources
将mainResource拷贝到target/classes目录
resources:testResources
将testResource拷贝到target/test-classes目录
特别地,maven的surefire:test
执行时相同位置的resource优先取test-classes目录的,找不到对应的resources才会去找classes目录下去找
- 指定文件类型不进行变量替换
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>jpg</nonFilteredFileExtension>
<nonFilteredFileExtension>gif</nonFilteredFileExtension>
<nonFilteredFileExtension>png</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</resource>
</resources>
- 用单独的插件命令结合命令选项 -X -e
这点非常有用,特别是当build结果达不到预期时debug使用效果极佳。
能看到具体过程信息,
插件当前版本及配置项信息
当前生效的配置信息
当前生效的properties信息
当前build过程的详细信息等
mvn resources:testResources -X -e
mvn resources:resources -X -e
- resource和testResource阶段的配置差异
这点非常重要,resource和testResource这两个goal配置定义的地方不一样,千万别搞错
比如说src/test/resources下的配置文件里也要通过@zok.node@
这样变量替换,就只能在testResources
标签下设置
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>