Spring PathMatchingResourcePatternResolver不能从JAR包中加载文件

起初的意图是这样的,打 算使用classpath:**/*.hbm.xml加载项目中所有的hibernate配置文件,但是后来发现如果文件打包在jar包中,这种方法是加 载不了的。认真阅读spring的javadoc文档后得知:如果使用通配符的话,在通配符(也就是*号)前面必须至少有一个根目录,除非要加载的文件在 文件系统中(也就是说在JAR包中就不行)。举个例子,classpath:*.xml不能获取jar包中根目录下的xml文件。文档中还说这事源于 JDK中ClassLoader.getResources()方法的一个限制:如果传递空字符串的话这个方法将仅能返回文件系统中的位置(不含JAR 包)。

所以如果要智能加载配置文件的话,还是要有个约定的位置,比如struts2插件的配置文件struts-plugin.xml默认就是在jar包中的根目录下的。

还有一个问题也会导致加载jar包中的资源失败,但是这个问题不是程序的问题,而是利用eclipse的export打jar包没有建立实体目录, 导出时记得钩选"Add directory entries"选项就能解决问题。

土豪请注意: 如果您觉得此文有帮助,可以给支付宝账户zuiyanwangyue@126.com转账进行打赏(可扫描右侧二维码),您的捐助将被用于完善此网站的功能和内容。
加入我们团队: 如果你是技术控并且愿意分享自己掌握的知识,欢迎加入我们团队,请联系QQ:421712311 如本文未能解决您面临的问题,也欢迎随时和我联系以便进一步探讨。

评论列表[0]