maven中resource标签详解
- 使用场景
- 使用语法
2.1 resource配置结构
2.2 配置语法及特殊场景
2.2.1 filtering的使用
2.2.2 resource之间的关系
2.2.3 includes和excludes的关系
2.2.4 打包默认其他目录
2.2.5 include和exclude支持通配符
2.2.6 自定义filter占位符 - 示例项目的结构
- 使用场景
通常情况下, maven项目中默认资源文件为src/main/resources和src/test/resources目录
但项目中可能会有以下场景:
需要添加src/main/resources之外的目录中的配置文件
只需要src/main/resources中部分配置文件
需要对src/main/resources中配置文件的变量, 进行placeholder进行解析值替换
这时候, 就需要在pom中配置build.resouces.resouce进行个性化配置
- 使用语法
2.1 resource配置结构
在pom中配置中可以配置的元素结构如下:
...
标签
标签
标签
标签
2.2 配置语法及特殊场景
(示例项目的结构参考文件最后)
2.2.1 filtering的使用
1.资源文件中使用${keyword}占位符来定义变量, 如
src/main/resouces/application.properties:
application.user=${username}
application.password=${password}
2.这时候可以在pom.xml文件中定义变量的取值
mysql
password123
3.如果需要对配置文件中变量进行替换实际值,就需要开启
src/main/resources
application.properties
true
打包后, 资源文件src/main/resouces/application.properties:
application.user=mysql
application.password=mysql
2.2.2 resource之间的关系
怎么理解pom中多个resource的关系? 并集? 交集? 还是其他?
先说结论: 多个resource可以理解为按顺序对多个resource进行收集资源
测试示例如下: 第一个resource排除application.properties, 第二个resource包含application.properties:
src/main/resources
application.properties
false
src/main/resources
application.properties
true
打包后, 得到如下结构:
target/test-resource
├── META-INF
└── WEB-INF
└── classes
├── application.properties
├── application.xml
├── application.yaml
└── application.yml
2.2.3 includes和excludes的关系
一般情况下一个resource中单独使用其中一个即可满足要求:
标签
标签
注意, 上述描述中仅的定义. 当同时存在includes和excludes是以哪个为主?
先说结论: 取两者描述资源的交集
测试示例:
src/main/resources
application.properties
application.yaml
application.xml
false
打包后得到结果:
target/test-resource
├── META-INF
└── WEB-INF
└── classes
├── application.xml
└── application.yaml
2.2.4 打包默认其他目录
打包src/main/resources默认目录之外的目录, 指定
src/main/config
**/*.*
false
打包得到结构:
target/test-resource
├── META-INF
└── WEB-INF
└── classes
└── redis.properties
从上述结果中, 可以得出一个非常重要的结论:
如果pom中显式定义了resource, 则要想默认的src/main/resources目录生效, 必须也显式额外配置
2.2.5 include和exclude支持通配符
** 表示任意目录, .表示任意文件名和扩展名
**/*.xml
**/*.*
2.2.6 自定义filter占位符
默认的占位符为${}, 但是为了与其他场景区分(如spring), 可能需要自定义占位符.
只需要显式定义
mysql
admin
@@
test-resource
src/main/resources
application.properties
true
application.properties文件内容:
application.user=@username@
application.password=@password@
还可以在maven-resources-plugin插件的configuration中配置:
org.apache.maven.plugins
maven-resources-plugin
2.5
false
@
UTF-8
- 示例项目的结构
src
└── main
├── config
│ └── redis.properties
├── java
└── resources
├── application.properties
├── application.xml
├── application.yaml
└── application.yml