2012-11-16 4 views
1

이 질문이 전에도 제기되었다고 확신합니다. . 나는 이미 언급하지만Maven을 사용하여 항아리를 포장하는 동안 org/springframework/context/support/ClassPathXmlApplicationContext에 대해 NoClassDefFoundError 가져 오기

배경 :(실패와 같은 다른 옵션을 시도했다 : 받는다는을 사용하여 모든 종속 항아리 포장

의 pom.xml을

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>assembly:package</id> 
      <phase>package</phase> 
      <goals> 
       <!-- Work around for http://jira.codehaus.org/browse/MASSEMBLY-97 
        as the goal should be attached. --> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
        <descriptor>src/main/assembly/assembly.xml</descriptor> 
       </descriptors> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>com.Application</mainClass> 
      </manifest> 
      <manifestEntries> 
       <Class-Path>config/</Class-Path> 
      </manifestEntries> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
      </manifest> 
     </archive> 
    </configuration> 
</plugin> 

클래스 경로

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src/main/java" /> 
    <classpathentry kind="src" path="src/main/resources" /> 
    <classpathentry exported="true" kind="con" 
     path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER" /> 
    <classpathentry kind="con" 
     path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jre7" /> 
</classpath> 

나는

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/c 
ontext/support/ClassPathXmlApplicationContext 
     at com.Application.main(Application.java:13) 
Caused by: java.lang.ClassNotFoundException: org.springframework.context.support 
.ClassPathXmlApplicationContext 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 

이 어떤 아이디어로

java -cp Scheduler-0.0.1-SNAPSHOT-exe.jar com.Application 

나는 점점 오전 예외를 사용하여 내 보낸 항아리를 실행하고 언제? 모든 종속 항아리 용 스프링 버전 3.0.6을 사용하고 있습니다.

감사 Gendaful

+0

'스케줄러-0.0.1-SNAPSHOT-exe.jar' 명령은,이 또한 클래스 경로에 모든 종속성을 포함해야 -jar 자바를 사용하여 당신이 그것을 실행할 수있는 JAR을 포장 할 때 메인 클래스로 com.Application를 지정하는 경우 – hoaz

답변

1

당신이 언급 한 클래스 패스는 이클립스 프로젝트의입니다. 빌드 대상을 사용하여 JAR을 준비하는 동안 maven 빌드 도구로 간주되지 않습니다. 스프링 jar를 pom.xml에 종속성으로 지정해야합니다. 응용 프로그램을 패키징하는 동안 Maven에서 스프링 jar를 고려해야합니다.

<dependencies> 
    ... 

    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>3.1.1.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-test</artifactId> 
     <version>3.1.1.RELEASE</version> 
    </dependency> 

    ... 
</dependencies> 
+0

THanks. 그것은 문제를 해결했다. – Gendaful

0

pom.xml 플러그인에이 플러그인을 추가 해보십시오.

 <!-- Adding depenencies to jar file --> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.1</version> 
     <configuration> 
     <configuration> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
        <resource>META-INF/spring.handlers</resource> 
       </transformer> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
        <resource>META-INF/spring.schemas</resource> 
       </transformer> 
       </transformers> 
      </configuration> 
     </configuration> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
관련 문제