Maven项目中resources配置总结

网友投稿 1282 2023-02-03

Maven项目中resources配置总结

Maven项目中resources配置总结

背景

通常Maven项目的文件目录结构如下:

# Maven项目的标准目录结构

src

main

java #源文件

resources #资源文件

filters #资源过滤文件

config #配置文件

scripts #脚本文件

webapp #web应用文件

test

java #测试源文件

resources #测试资源文件

filters #测试资源过滤文件

it #集成测试

assembly #assembly descriptors

site #Site

target

generated-sources

classes

generated-test-sources

test-classes

xxx.jar

pom.xml

LICENSE.txt

NOTICE.txt

README.txt

其中src/main/resources和src/test/resources是资源文件目录。本文将详细介绍资源文件相关的配置。

第一部分 基本配置介绍

我们在使用Maven组件来构建项目的时候,通常将配置文件放在资源文件目录下。针对这个目录,在pom.xml文件进行了定义,我们首先看一个案例:

src/main/resources

true

application.properties

src/main/resources

false

application.properties

标签指定资源文件目录;

标签 指定资源文件目录中,哪些文件被打包。

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

特别的,标签是一个bool值,默认值为false。在maven资源文件中,支持使用变量placeholder,例如资源文件:

# application.properties

application.user=${username}

application.password=${password}

文件中使用${keyword}占位符来标识变量。这时候可以在pom.xml文件中定义变量的取值:

mysql

password123

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

第二部分 具体配置和注意事项

2.1 案例说明

根据上面的介绍,最开始例子中有两段resource的配置描述,分别的含义为:

第一个配置的含义是:在配置文件目录src/main/resources过滤掉其他文件,只保留application.properties文件。并且开启filtering变量替换属性。

第二个配置的含义是:在配置文件目录src/main/resources过滤掉application.properties文件,其他文件均保留。并且关闭filtering变量替换属性。

需要特别注意的是,这里两个都是对资源目录的配置定义,一个是保留application.properties,一个是去除application.properties。这样两个配置会不会冲突?实际上两个配置是兼容。最后是取两个配置分别过滤的文件集合的并集。

可以看一下例子,资源目录src/main/resources里面有三个文件:

application.yml

application.properties

application.xml

编译后,target/classes路径中三个配置文件都是有的。第一配置文件过滤后文件集合为{application.properties},第二个配置过滤后的集合为{application.yml,application.xml},最后取并集就得到了最后编译结果。

2.2 正则过滤

在对资源目录中文件进行过滤时,还支持正则表达式。例如:

**/*.xml

这个表达式表示包含了资源目录下面所有xml文件(以及子目录下面)。

2.3 变量占位符

这里主要指的是的功能。例如下面的xml文件定义了一个研发

dev

${}

mysql

password123

true

配置中定义的username和password两个变量的值。使用package -P dev编译后,配置文件中占位符变量被替换:

application.user=mysql

application.password=password123

需要注意的是这里增加了标签配置,定义了占位符的格式。有些时候其他依赖包的pom文件也会指定占位符的格式,就会造成格式不统一。例如:spring boot把默认的占位符号${}改成了@var@。所以建议进行配置,否则容易环境"污染"。

2.4 关于一个错误观点的说明

有很多关于这个主题的文章(例如CSND)中,认为同一个中,若是都存在的话,那就发生冲突了,这时会以为准。

关于这个论点,笔者实际做了实验,同一个中,同时配置了

src/main/resources

true

application.properties

application.properties

</build>

编译结果,配置文件没有打包进入target/classes。说明这个论点是有问题的。说明在同一个resource中两种配置是取交集的。

2.5 子目录

资源目录也是支持子目录的。即可以在资源目录下面创建子目录,在打包过程中会保留子目录结构。例如:

resources

-test

--app.xml

-application.yml

-application.properties

-application.xml

在项目编译后,如果子目录中资源文件被保留,那么子目录的结构也是保留的。例如:

target

-classes

--test

---app.xml

-application.yml

-application.properties

-application.xml

第二部分 读取resources资源

例如我们的配置文件properties类型的配置文件,可以使用下面的语句进行读取:

方法1,从编译后的整个classes目录下去找;

InputStream is = this.getClass().getResourceAsStream("/" +application.properties);

方法2,ClassLoader从整个classes目录找;

InputStream is = this.getClass().getClassLoader().getResourceAsStream(application.properties);

读取使用Java的工具包java.util.Properties:

import java.util.Properties;

Properties properties = new Properties();

InputStream is = this.getClass().getClassLoader().getResourceAsStream(application.properties);

properties.load(is)

//获取配置文件中name的配置值

System.out.println(properties.get(getProperty("name")))

其他类型的配置文件读取读者可以执行查找资料。

参考文献及资料

1、Maven Resources Plugin,链接:https://maven.apache.org/components/plugins-archives/maven-resources-plugin-2.6/

2、Maven资源过滤的配置,链接:http://c.biancheng-/view/5285.html

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微信小程序pc端(微信小程序pc端打开没数据)
下一篇:严防前端环节安全隐患(前端安全防范)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~