平常写的maven项目在打包时,经常需要处理的两个问题,一个是打包不成功,出现各种问题(类似主清单找不到,主类找不到等等);另一个是报找不到配置文件的问题。
这里讲一下配置文件读不到的问题
通常情况下,我们在本地使用 “src/main/resources/” 拿到resources下的文件(如果你的配置是放在packge下,也可以通过这种方式根据路径引过去,简直不要太简单),然而如果遇到需要打包部署项目的时候,需要打包,打包完成后(默认打包没问题)会发现它找不到配置文件,你解压后可能在里面找到配置也可能压根没打包进去。这种情况下,就比较上脑了。。。。
处理方式 这种情况下,我们需要做两步处理: 一、指定将自己的配置目录/文件加入到打包中 在maven项目的pom中,在build标签下加入如下配置(以resouces目录下的yml文件为例)
<resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.yml</include> </includes> <filtering>false</filtering> </resource> </resources>二、读取文件流
// 这里就以读取文件流为例,这种就会读取resources下的conf.yml文件(不能在前面加/) InputStream in = YamlConf.class.getClassLoader().getResourceAsStream("conf.yml");以上两部基本就能解决打包之后无法读取配置文件的问题,我这里的问题得到了解决!
YamlConf.class.getClassLoader().getResourceAsStream 是获取在classpath路径下(可以理解是resources路径下)的资源文件的输入流,项目打包后src下的一些资源文件移至WEB-INF/classes,所以 如果resouces下放了一些.properties或者.yml配置文件,在打包后一般是放在classes下的,所以这种方式可以读到!
但是,我也遇到过一个奇怪的现象
springboot项目打包,一般情况下不需要配置resources的,直接打包即可,很方便。但我在读取配置文件的时候,这种从class.getClassLoader().getResourceAsStream 找不到配置
更换了这种通用方式还是无效
Resource resource = new ClassPathResource("resource.properties"); InputStream is = resource.getInputStream();之后如果找到了有效的方法再补上
参考地址: https://www.cnblogs.com/whalesea/p/11677657.html https://blog.csdn.net/feeltouch/article/details/83796764