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

異常如圖: java

平時能夠正常運行的springMVC項目,在用maven加入依賴,添加jar包後運行,出現以下異常: web

XParseException:schema_reference.4:Failed to read schema document  以下: spring

異常提示:找不到xsd文件,在spring的web.xml文件寫好基本配置以後,配置文件《servlet-name》-servlet.xml文件中的beans定義的xsi:schemaLocation爲,如圖: maven

首先要知道:spring在加載xsd文件時老是先試圖在本地查找xsd文件(spring的jar包中已經包含了全部版本的xsd文件), spa

在不少spring的jar包裏,在MERA-INF目錄下都有一個spring.schemas,這是一個property文件, 插件

如圖爲使用maven配置的spring-beans-3.0.3的jar包下的META-INF目錄下的spring.schemas目錄; xml

異常出現的緣由:實際上,這個文件就是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包含了全部出現過得版本的集合! servlet

 

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

csdn上搜::;;使用maven插件對java工程進行打包 ,做者:chenzhou123520(..博客不讓留外鏈)

 

哎,困擾了幾天的問題,搞的心情一直很差,在前輩們的帖子上找到了。

如今終於解決了,記下來備用!!!

相關文章
相關標籤/搜索