2010-07-28 2 views
4

Eclipse에서 프로젝트를 실행할 때 Maven2와 Spring 3을 사용할 때 모든 것이 정상적으로 작동하지만 assembly : assembly를 사용할 때 생성 된 jar는 다음 예외를 throw합니다.스프링 빌드 문제 - 콩 스키마를 찾을 수 없습니다.

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/메인/자원에 저장됩니다

내 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 :

더 구글이 해결책이 향후 없지만 봄과 메이븐, 내 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> 

답변

2

나는 동일한 문제가있었습니다. 음영 플러그인을 사용하면 도움이되었지만, 스프링의 핸들러와 스키마 파일을 concat하려면 http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html에 설명 된대로 변환기를 추가해야했습니다.

+0

감사합니다. 파일을 병합하는 것이 훨씬 좋을 것 같습니다. – Robert

+0

사실, 전에 이걸 보았습니다. 왜 내가 전에 더 가까이 보지 않았는지 모르겠습니다. 감사! – javamonkey79

1

, 그것은 각각의 spring.handlers와 spring.schemas 사이에 여러 가지 스프링 의존성의 META-INF 폴더 사이에 충돌이있는 것 같습니다.

내가 발견 한 트릭은 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에서 작동하는 하나의 해결책은 별도의 jar 대신 하나의 Spring jar를 포함시키는 것입니다. Spring 3.x의 signle jar가 있는지 나는 잘 모르겠다.

<dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring</artifactId> 
     <version>2.5.6</version> 
</dependency> 
관련 문제