XParseException:schema_reference.4:Failed to re...

旧城冷巷雨未停 提交于 2019-11-27 07:48:15

异常如图:

平时可以正常运行的springMVC项目,在用maven加入依赖,添加jar包后运行,出现如下异常:

XParseException:schema_reference.4:Failed to read schema document  如下:

异常提示:找不到xsd文件,在spring的web.xml文件写好基本配置之后,配置文件《servlet-name》-servlet.xml文件中的beans定义的xsi:schemaLocation为,如图:

首先要知道:spring在加载xsd文件时总是先试图在本地查找xsd文件(spring的jar包中已经包含了所有版本的xsd文件),

在很多spring的jar包里,在MERA-INF目录下都有一个spring.schemas,这是一个property文件,

如图为使用maven配置的spring-beans-3.0.3的jar包下的META-INF目录下的spring.schemas目录;

异常出现的原因:实际上,这个文件就是spring关于xsd文件在本地存放路径的映射,spring就是通过这个在本地查找xsd文件的;在排除URL输入有误之后,声明的xsd文件找不到可能就是在本地不存在。一般来说,新版本的spring jar包会将所有(应该是自x.0以后)的xsd打包,并在spring.schemas文件中加入对应项,出现问题的情况往往是声明使用了一个高版本的xsd文件,如3.0,但当初定义spring的jar包却是2.5之前的版本,由于2.5版本自然不可能包含3.0的xsd文件,此时就会导致spring去站点下载目标xsd文件。

如遇断网或是目标站点不可用,上述问题就会发生。

 

解决方法:在实际开发中,最常导致这一问题的原因其实遇使用了maven的一个“assembly”的打包插件有关;荐使用另一款打包插件“shade”;因为assembly在对项目进行打包时,只能讲一个版本的jar包下的spring.schemas文件放入最终打出的jar包里,而以前版本的xsd文件就会丢掉,导致文件找不到;;;而shade插件在打包的同时不会抛弃以前的spring.schemas文件,而是把他们进行合并,并最终生成单一的jar包,所以spring.schemas包含了所有出现过得版本的集合!

 

具体在pom.xml文件中添加maven-shade-plugin插件的步骤,

csdn上搜::;;使用maven插件对java工程进行打包 ,作者:chenzhou123520(..博客不让留外链)

 

哎,困扰了几天的问题,搞的心情一直不好,在前辈们的帖子上找到了。

现在终于解决了,记下来备用!!!

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!