springBoot项目打成jar包给其他项目引用,读取jar里面的资源文件失败
发布日期:2021-07-20 20:54:07 浏览次数:28 分类:技术文章

本文共 2247 字,大约阅读时间需要 7 分钟。

读取项目中的xml文件

代码:

SAXReader reader = new SAXReader();		Document document = reader.read(ResourceUtils.getFile("classpath:application-validation.xml"));		Element root = document.getRootElement();

但是抛出 FileNotFound异常

java.io.FileNotFoundException: class path resource [application-validation.xml] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/usr/local/conet/cloud/conet-ds/DS_V200R002B020.jar!/BOOT-INF/classes!/application-validation.xml	at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217)	at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:180)	at com.validation.ValidationConfigParser.parse(ValidationConfigParser.java:39)	at com.validation.runner.ValidationRunner.run(ValidationRunner.java:28)	at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797)	at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:781)	at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255)	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)	at com.ds.ConetDsApplication.main(ConetDsApplication.java:26)	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)	at java.lang.reflect.Method.invoke(Method.java:498)	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)	at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)	at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)

原因:

项目打成jar包后,资源文件也存在于jar包中,文件的绝对路径是jar:file:/D:/sunmnet/JetBrains/workspace/xxx/target/xxx-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/XXX.cfg但在运行过程中,spring是不允许直接访问jar包内的文件的,所以会报错。

解决:

采用读取流的方式访问文件:

ClassPathResource resource = new ClassPathResource("application-validation.xml");	InputStream inputStream = resource.getInputStream();	Document document = reader.read(inputStream);	Element root = document.getRootElement();

 

转载地址:https://blog.csdn.net/liao0801_123/article/details/90639334 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:swagger使用过程中遇到的坑
下一篇:线程探讨

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月08日 02时48分11秒