首页 > 代码库 > 打成Jar包后运行报错 Unable to locate Spring NamespaceHandler for XML schema namespace

打成Jar包后运行报错 Unable to locate Spring NamespaceHandler for XML schema namespace

MAVEN项目,在IDEA中运行正常,但是把它打成jar包后再运行就会出现异常:
 
Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/context]
Offending resource: URL [jar:file:/home/jiashubing/mysoft/jartest3/cli3.jar!/META-INF/spring/spring-shell-plugin.xml]
 
这个错误并不少见,但是网上搜到的多为在项目运行的时候报这个错误。也有jar包中报这个错误的帖子,但是都说配置文件的版本不一致导致的。这些我都试过了,都无法解决。
 
尝试了很多次以后,终于发现,虽然我在项目中是有spring-shell-plugin.xml这个配置文件的,但是打成jar包以后,jar包中并没有包含这个配置文件
 
原来,在IDEA中,MAVEN项目是会自动扫描 src/main/resources 路径下的资源配置文件的,所以无需额外配置。
自动扫描的原因是:resource 下的文件编译之后存放的位置,直接位于classes下面,这个路径其实就是classPath的路径,所以,在resources 根目录下的配置文件其实就是 classPath的路径
 
 
但是打成Jar包以后,它是不会自动扫描 src/main/resources 路径下的配置文件了,所以应当在这里手动配置,让它能扫描到xml配置文件。
只需要在pom.xml中添加以下代码:
<resources>
   <resource>
      <directory>src/main/resources</directory>
      <includes>
         <include>**/*.xml</include>
      </includes>
   </resource>
</resources>
 
原创文章,转载请注明出处!

补充一下
MAVEN项目的标准目录结构:
 
src
  -main
      –bin 脚本库
      –java java源代码文件
      –resources 资源库,会自动复制到classes目录里
      –filters 资源过滤文件
      –assembly 组件的描述配置(如何打包)
      –config 配置文件
      –webapp web应用的目录。WEB-INF、css、js等
  -test
      –java 单元测试java源代码文件
      –resources 测试需要用的资源库
      –filters 测试资源过滤库
  -site Site(一些文档)
target
LICENSE.txt Project’s license
README.txt Project’s readme
 
红色字体的四个目录是常用的

打成Jar包后运行报错 Unable to locate Spring NamespaceHandler for XML schema namespace