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
紅色字型的四個目錄是常用的