• 打成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
     
    红色字体的四个目录是常用的
  • 相关阅读:
    JavaScript 选取 min 到 max 之间的 length 个数字并排序
    css BFC
    css 清除浮动
    css hasLayout——IE浏览器css bug的一大罪恶根源
    css hack
    HTML React
    JavaScript 封装一些常用的函数
    dsoframer.ocx在win7下没法用
    DSO Framer ActiveX 控件
    c#读写txt文件
  • 原文地址:https://www.cnblogs.com/acm-bingzi/p/6625123.html
Copyright © 2020-2023  润新知