打成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

红色字体的四个目录是常用的

时间: 2024-12-21 11:15:27

打成Jar包后运行报错 Unable to locate Spring NamespaceHandler for XML schema namespace的相关文章

mvn打包spring工程成jar时报Unable to locate Spring NamespaceHandler for XML schema namespace错误解决办法

有一个小工程,使用了spring,在使用maven的assembly打包成独立可执行的jar包后,在执行时报如下错误:Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace      网上对这个问题也有提及,这是assembly的一个bug.参见:http://jira.codehaus.org/browse/MASSEMBLY-360 原因是spring的多个jar包中都含

Spring 3.0: Unable to locate Spring NamespaceHandler for XML schema namespace

被这个问题折磨着很久:参考: http://have23.iteye.com/blog/1340777 (cfx 与 spring 整合的时候出现的问题: org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://c

Unable to locate Spring NamespaceHandler for XML schema namespace

java服务中整合了spring,在Eclipse里本地启动时没问题,但是部署到局域网linux服务器上时解析spring applicationContext.xml报错,具体报错信息如下: Console代码   org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for

spring 与 CXF 整合 webservice 出现error “Unable to locate Spring NamespaceHandler for XML schema namespace” 总结

我试了多个版本的spring 发现 出现error : Unable to locate Spring NamespaceHandler for XML schema namespace 并非都是spring.schemas 和 spring.handlers 两个文件覆盖缺少等造成的问题. 出现error原因: spring 版本 通过cxf 自带的spring jar包看来  只与最稳当的spring.3.0.5 兼容.所以在整合spring 与 cxf 的时候, 最后不要自己去另外加spr

onfiguration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]

org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/security]Offending resource: file [D:\work\wtgs.

Configuration problem: Unable to locate Spring NamespaceHandler for XML schema namespace 解决方法

这个问题是在用到spring时,本地IDE里面跑的很正常,但是打包后在集群上运行时报错. 多方查找资料后确定了问题的根源,由于在依赖中调用了spring的许多包,会存在文件覆盖的情况. 具体是 这三个文件.查看后,只剩下tx的配置了. 解决方法 第一种方法是使用maven的打包插件,在里面保留各个spring包的配置信息: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>mav

Unable to locate Spring NamespaceHandler for XML schema namespace[http://www.springframework.org/schema/security]

使用maven构建spring security的一个demo时出现了这个问题,网上找了很长时间,很多答案都不适合自己. 1.一开始根据提示以为是xsd和jar包的版本冲突问题,参考了这篇文章 http://www.baeldung.com/unable-to-locate-spring-namespacehandler-for-xml-schema-namespace, 修改xsd和jar包版本一致,但是还是报同样的问题. 2.后来找到一些答案可能是META-INF文件中spring.sche

JAVAME导入外部jar包的时候报错 Errors during build.Errors running builder ‘Preverification’ on project ‘XXXXX’.

在eclipse下的日志文档: !SESSION 2014-05-19 17:23:10.833 ----------------------------------------------- eclipse.buildId=4.3.2.M20140221-1700 java.version=1.8.0_05 java.vendor=Oracle Corporation BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=zh_CN

Python首次安装后运行报错(0xc000007b)的解决方法

最近在安装完Python后运行发现居然报错了,错误代码是0xc000007b,于是通过往上查找发现是因为首次安装Python缺乏VC++库的原因,下面通过这篇文章看看如何解决这个问题吧. 错误提示如下: 其实这是一个挺常见的系统报错,缺乏VC++库. 我安装的是python3.5.2,这个版本需要的vc版本是2015的了,下载:Microsoft Visual C++ 2015 update 3 安装完后发现就正常了: 总结 通过以上的方法就能轻松解决首次安装Python后运行报错的问题,希望本