2013-06-03 62 views
0

根據spring-data-mongodb,我有一個簡單的彈簧控制檯應用程序。該應用程序運行正常時,我通過Eclipse(運行方式 - > Java應用程序)執行的主要方法,但是當我的包作爲一個單一罐我應用程序打包爲單個罐子時未找到Mongo NamespaceHandler

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/data/mongo] 

要創建我用行家組件插件

單罐
<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
    <descriptorRefs> 
     <descriptorRef>jar-with-dependencies</descriptorRef> 
    </descriptorRefs> 
    <archive> 
     <manifest> 
     <mainClass>au.com.myapp.MainClass</mainClass> 
     </manifest> 
    </archive> 
    </configuration> 
</plugin> 

和Maven命令

mvn clean package assembly:single 

我檢查彈簧數據MongoDB的罐子裏面所有的Maven依賴類被複制好了,包括彈簧mongo.xsd。我已經使用-cp .和增加彈簧數據mongodb.jar我一起單獨的jar,但不起作用

我該如何解決這個問題也試過/還有什麼事我可以做調試它

回答

0

發生此問題是因爲當使用程序集插件創建「超級jar」時,每個依賴jar的META-INF文件夾的內容互相重疊。

例如彈簧數據的MongoDB具有聲明瞭命名空間處理器META-INF/spring.handlers文件,並在我的情況下,它得到了由另一個春天罐子

覆蓋從這一事實,我使用匯編總結創建一個超級jar的插件並不是一個好方法。因此,我使用原始的應用程序jar並將其所有依賴項放置在單獨的文件夾中。這可以通過使用maven-maven-dependency-plugin(如下所示)來實現。所有的依賴關係將會被複制到目標/依賴使用-cp參數(Windows)中

java -cp "myapp.jar;dependency/*" com.mycompany.MainClass 

的(默認綁定到工藝資源相)

<!-- Copy all dependencies (including transitive) into target/dependency folder --> 
    <plugin> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
     <goals> 
      <goal>copy-dependencies</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

然後在命令行中運行我的應用程序上當然,我必須在部署到生產服務器時刪除並重新複製整個依賴項文件夾,以避免運行時依賴項不匹配

相關問題