問題
一個用Spring建的java項目,在Eclipse或idea中運行正常,為什么打包后運行出現如下錯誤呢?
2019/07/10/19:04:07 WARN [main] org.springframework.util.xml.SimpleSaxErrorHandler.warning(SimpleSaxErrorHandler.java:48) - Ignored XML validation warning
org.xml.sax.SAXParseException; lineNumber: 9; columnNumber: 76; schema_reference.4: 無法讀取方案文檔 'http://www.springframework.org/schema/beans/spring-beans.xsd', 原因為 1) 無法找到文檔; 2) 無法讀取
文檔; 3) 文檔的根元素不是 <xsd:schema>。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaWarning(Unknown Source)
....
原因分析
因為我們使用的Spring系列依賴包:spring-beans、spring-context、spring-aop、spring-jdbc、spring-tx等其中有部分配置文件是同名的:spring.facotries、spring.handlers、spring.schemas、spring.tooling。
在進行打包的過程中,打包插件如果沒有進行詳細配置,這些同名的配置文件就會放在同一個目錄下,同名的文件可能會被替換,最后就會形成配置文件不全的情況。
解決辦法
將所有的配置文件中的配置信息進行手動合並。然后將項目jar包目錄\META-INF下的這4個文件用合並好的文件替換掉。
下面我提供了這4個已經合並好的文件(注意:本文件是針對Spring4.2及以下版本的,高版本還需自己合並)的下載地址:
鏈接: https://pan.baidu.com/s/1MXvpuwzgY-qfVYwJeveb_Q 提取碼: keh4
測試運行,正常。