2010-07-28 58 views
4

我正在使用Maven2和Spring 3,當我在Eclipse中運行我的項目時一切正常,但是當我使用程序集:程序集時,生成的jar會引發以下異常:春天構建問題 - 找不到豆架構圖

Exception in thread "main" 
org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 4 
in XML document from class path resource [beans.xml] is invalid; nested exception 
is org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of 
element 'beans'. 

我的豆子文件看起來是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
    <!-- Beans Here --> 
</beans> 

該文件存儲在的src/main /資源

我的pom.xml有春天以下依賴性:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-context</artifactId> 
    <version>3.0.3.RELEASE</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 

任何想法爲什麼會發生這種情況?怎麼修?

UPDATE:

進一步探索谷歌原來,春和Maven不要在太清楚了,在我的pom.xml以下,雖然沒有解決辦法是即將到來:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-5</version> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>org.robert.xclades.Main</mainClass> 
      </manifest> 
     </archive> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
</plugin> 

回答

1

問題,似乎是各種彈簧依賴關係的META-INF文件夾中的每個不同spring.handlers和spring.schemas之間存在衝突。

我發現的技巧是通過在src/main/resources/META-INF中創建這些文件並將這些單個文件的內容複製並粘貼到這些文件中來覆蓋這些文件。其次,使用maven-jar-plugin來設置清單的mainClass;和maven-shade-plugin,而不是maven-assembly-plugin。因此,更新的pom.xml的樣子:

<plugin> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>org.robert.xclades.Main</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-shade-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

所以所有需要現在maven package

2

我發現與Spring 2.5.6一起使用的一種解決方案是包含單個Spring jar而不是單獨的jar。我不確定Spring 3.x是否有一個signle jar。

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring</artifactId> 
     <version>2.5.6</version> 
</dependency>