IT俱乐部 Java maven中resource配置使用详解

maven中resource配置使用详解

maven中resource标签详解

1. 使用场景

通常情况下, maven项目中默认资源文件为src/main/resourcessrc/test/resources目录

但项目中可能会有以下场景:

  • 需要添加src/main/resources之外的目录中的配置文件
  • 只需要src/main/resources中部分配置文件
  • 需要对src/main/resources中配置文件的变量, 进行placeholder进行解析值替换

这时候, 就需要在pom中配置build.resouces.resouce进行个性化配置

2. 使用语法

2.1 resource配置结构

在pom中配置中可以配置的元素结构如下:

    ...
  
  • 标签指定资源文件目录
  • 标签 指定资源文件目录中,仅包含哪些文件被打包
  • 标签指定资源文件目录中,仅哪些文件不被打包
  • 标签是一个bool值,默认值为false。指定打包时的配置文件中是否进行变量替换

2.2 配置语法及特殊场景

(示例项目的结构参考文件最后)

2.2.1 filtering的使用

1.资源文件中使用${keyword}占位符来定义变量, 如src/main/resouces/application.properties:

application.user=${username}
application.password=${password}

2.这时候可以在pom.xml文件中定义变量的取值

mysqlpassword123

3.如果需要对配置文件中变量进行替换实际值,就需要开启,该值设置为true

  src/main/resourcesapplication.propertiestrue

打包后, 资源文件src/main/resouces/application.properties:

application.user=mysql
application.password=mysql

另, 变量的定义可以不放在pom里, 也可以指定其他文件, 通过build.filters.filter配置即可. 示例:

test-maven-resourcesrc/main/config/${active.profile}/zookeeper.propertiessrc/main/config/${active.profile}/xdcs.propertiessrc/main/config/${active.profile}/maven-test.propertiessrc/main/config/${active.profile}/web.propertiessrc/main/resourcestruesrc/main/config/${active.profile}false

2.2.2 resource之间的关系

怎么理解pom中多个resource的关系? 并集? 交集? 还是其他?

先说结论: 多个resource可以理解为按顺序对多个resource进行收集资源

测试示例如下: 第一个resource排除application.properties, 第二个resource包含application.properties:

 src/main/resourcesapplication.propertiesfalsesrc/main/resourcesapplication.propertiestrue

打包后, 得到如下结构:

target/test-resource
├── META-INF
└── WEB-INF
    └── classes
        ├── application.properties
        ├── application.xml
        ├── application.yaml
        └── application.yml

2.2.3 includes和excludes的关系

一般情况下一个resource中单独使用其中一个即可满足要求:

  • 标签 指定资源文件目录中,仅包含哪些文件被打包
  • 标签指定资源文件目录中,仅哪些文件不被打包

注意, 上述描述中仅的定义. 当同时存在includesexcludes是以哪个为主?

先说结论: 取两者描述资源的交集

测试示例:

 src/main/resourcesapplication.propertiesapplication.yamlapplication.xmlfalse

打包后得到结果:

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), 可能需要自定义占位符.

只需要显式定义的properties即可.

mysqladmin@@test-resourcesrc/main/resourcesapplication.propertiestrue

application.properties文件内容:

application.user=@username@
application.password=@password@

还可以在maven-resources-plugin插件的configuration中配置:

org.apache.maven.pluginsmaven-resources-plugin2.5false@UTF-8

3. 示例项目的结构

src
└── main
    ├── config
    │   └── redis.properties
    ├── java
    └── resources
        ├── application.properties
        ├── application.xml
        ├── application.yaml
        └── application.yml

到此这篇关于maven中resource配置详解的文章就介绍到这了,更多相关maven resource配置内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/code/java/8722.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部