运行jar文件失败classpath下的资源文件找不到

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行jar文件失败classpath下的资源文件找不到相关的知识,希望对你有一定的参考价值。

我弄了一个程序用到了spring配置
如下:
ApplicationContext act = new ClassPathXmlApplicationContext(
"classpath:applicationContext.xml");
maven建的项目,目录结构为:

用eclipse的时候可以直接用main方法运行
但是我用eclipse里面的export导出jar包的时候却报了spring加载配置文件失败,find not found exception
jar包结构:

求高手帮忙解答问题。

我没有用过 spring

classpath:applicationContext.xml  这个配置,

如你图中所示,放在了resources中,那么在工程中是可以运行的?

只是打包到jar 中以后找不到?


提几点猜测

    resources中的配置文件,没有找包进去。

    ClassPathXmlApplicationContext  这个可能不支持 jar中的使。

        不知道有没有支持流的文法,如果有,你可能改成  

      InputStream stream = this.getClass().getResourceAsStream("/resources/spring.xml");

这样来加载,试一下。

追问

可以用Resource来加载的。但即使这样写了

act = new ResourceXmlApplicationContext(new UrlResource( Thread.currentThread().getClass().getResource("/applicationContext.xml")));

还是出错

追答

你打包以后
/applicationContext.xml
这个在顶级目录中?
不是
/resources/applicationContext.xml
这样?

你给出的信息中,好象是找不到http://www.sparingframework.org/............
这个命名空间。

参考技术A ApplicationContext act = new ClassPathXmlApplicationContext(
"classpath:applicationContext.xml"); 这一句话, 你打包完了之后,它在load applicationContext.xml 的时候 路径变了。
实在找不到对的路径, 就把那个配置文件拿出来,hard code 写进去(仅仅 做testing)追问

没懂什么意思诶。“hard code 写进去(仅仅 做testing)”

我如果把jar包里面的资源文件取出来的话,那么,在加载spring配置的时候又会出现一些解析文件错误,什么spring schema namespace错的

追答

你那个错误 应该是找不到对应的配置文件
把你的配置文件拿出来 放在一个写死的路径下面(c:\\...)

参考技术B 下面的图片,是编译后的目录结构?

那恐怕
new ClassPathXmlApplicationContext("classpath:resources/applicationContext.xml");

或换成
FileSystemXmlApplicationContext
new FileSystemXmlApplicationContext("resources/applicationContext.xml");追问

刚尝试了用classpath:resources/applicationContext.xml

eclipse运行是找不到文件,

jar包运行文件是找到了,但是

追答

这些配置文件,不应该放到子目录里面,像现在还报LOG4J也错了。
如果放子目里面,很多的配置都要另外指定。

追问

这些不是我自己手工建的目录结构,是我用eclipse导出的时候选择了runnable jar。
不知道用什么方式打包才是正确的操作。

SpringBoot 访问不到static文件夹下的静态资源

静态资源的文件夹

"classpath:/META-INF/resources/", 
"classpath:/resources/",
"classpath:/static/", 
"classpath:/public/" 
"/":当前项目的根路径

 

这里有个坑==》启动项目后访问不到静态资源,一直宝404

这是静态资源的存放位置:

1592400450(1)

此时 :

需要 maven clean,然后重启项目即可

或者ctrl+f5清除浏览器缓存,再进行访问

1592400518(1)

1592400568(1)

以上是关于运行jar文件失败classpath下的资源文件找不到的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse 工程目录下的.classpath.project文件和.settings文件作用

libgdx自问自答

用于资源导出的 Maven 配置

java自定义classloader在加载jar包和classes的时候,classloader不能找到classpath下的配置文件

spring import jar中的bean配置文件

jar使用教程 架包