maven 的resources标签使用
maven 的resources标签使用
- TOC
{:toc}
默认情况下的maven资源配置
此标签用来控制资源的拷贝,maven对资源的控制是使用maven-resources
插件完成的。
使用mvn help:effective-pom
查看实际使用的配置。resources插件
默认会执行testResources
和 resources
两个goal
1 |
|
resources插件默认执行上面两个goal,这两个步骤分别对测试资源和正式资源进行拷贝。
从哪里拷贝到哪里是由resources
标签决定。默认resources
标签是:
1 |
|
可以看到默认目标分别是src/main/resources
和 src/test/resources
, 而输出目标分别是target/classes
和target/test-classes
。
也可以使用变量代替:${project.build.outputDirectory}
表示默认的输出目录,即target目录。${project.basedir}
表示项目目录,即pom文件所在的目录(会与target同级)
定制Resources标签
我们自定义resources
标签可以覆盖超级pom的默认配置。下面只讲解resources
标签,testResources
标签是同理的。
这个标签写在build
标签下,用来配置resources插件工作
1 |
|
directory
表示原资源路径,请填写相对路径,相对于pom所在的目录,即如果
pom.xml
在d:project
文件夹下,默认的相对路径为d:project/
,拼在一起就变成d:project/src/main/resources
,所以这里填写路径不要以/
开头,否则会变成绝对路径。这个选项是必填的。
targetPath
资源拷贝的目标地址,这个路径是选填的。默认输出路径为
target/classes/
,如此处填写abc
,则会将
src/main/resources
下的文件拷贝到target/classes/abc
文件夹下。不写就是拷贝到target/classes/
。includes 和 excludes
maven默认会将
directory
下的文件全部拷贝到targetPath
下,但是受这两个属性控制。如果存在
includes
则只将includes
指定的文件拷贝,其余不拷贝。如果在
excludes
则将排除掉指定文件外的剩余文件拷贝。如果同时存在,则按照先后顺序过滤。
例如先存在
includes
,后存在excludes
,则先使用includes
筛选出满足条件的文件,再使用excludes
对上面筛选出来的文件进行二次筛选。如果同时存在,且同时操作同一个文件,则以excludes为准。
因为无论excludes在前还是在后,都会将文件过滤掉,所以同一个文件来说一定会被过滤掉。
上面的四个规则是对于同一个
resource
标签内的includes、excludes
来讲的,不是同一个resource
标签互相不影响。例如下面的例子使用一个
resource
过滤掉所有的application*.properties
,再使用另一个
resource
添加进来。
有时使用单个
resource
标签可能无法完成想要的行为,可以多个resource
组合使用如想要
resources
文件夹下的application*.properties
文件,根据配置选择打包哪个,可以这样写。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<resources>
//这个resource排除掉所有application*.properties
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>application*.properties</exclude>
</excludes>
</resource>
//这个resource添加了application.properties 和 application-${profile.active}.properties
<resource>
<directory>src/main/resources</directory>
<includes>
<include>application.properties</include>
<include>application-${profile.active}.properties</include>
</includes>
</resource>
</resources>filtering
这个选项可以是true或 false,表示是否对资源进行过滤,也就是说,可以在配置文件里写一些动态的值,maven会将值替换成真正的值,设成false则不会过滤。
比如下面
properties
文件中的一条记录,maven编译完成后值会被替换成profile.active
这个变量代表的值。1
spring.profiles.active= @profile.active@
总结
需要注意的一点是,如果在自己的pom里配置的resource标签,超级父pom里的resource就会失效了,比如下面这样配置后,只会拷贝src/main/myImage
里的内容,默认的src/main/resources
内的内容就不会被拷贝了。
1 |
|
可以再添加一个,两个resource
共同配置即可。
1 |
|