2013-09-05 3 views
1

Spring 애플리케이션에 이상한 문제가 있습니다. 나는 이클립스를 사용하고 난 자바 응용 프로그램으로 실행을 클릭하면 내 응용 프로그램은 마치 마법처럼 작동하지만 내가 받는다는 빌드를 클릭 (MVN 설치) 항아리에 포장 후 실행하려고하면 내가 얻을 :Maven Spring Jar 프로젝트 java.lang.ClassNotFoundExceptiona

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/c 
ontext/ApplicationContext 
at java.lang.Class.getDeclaredMethods0(Native Method) 
     at java.lang.Class.privateGetDeclaredMethods(Unknown Source) 
     at java.lang.Class.getMethod0(Unknown Source) 
     at java.lang.Class.getMethod(Unknown Source) 
     at sun.launcher.LauncherHelper.getMainMethod(Unknown Source) 
     at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source) 
Caused by: java.lang.ClassNotFoundException: org.springframework.context.Applica 
tionContext 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.net.URLClassLoader$1.run(Unknown Source) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
     at java.lang.ClassLoader.loadClass(Unknown Source) 
     ... 6 more 

나는 것을 gues 문제는이 라인에 있습니다 공공 정적 무효 메인 (문자열 []에 args) {내가 받는다는 종속성의 모든 병이

ModernSoft ms = new ModernSoft(); 
StringBuffer classpath = new StringBuffer(); 
ClassLoader applicationClassLoader = ms.getClass().getClassLoader(); 
if (applicationClassLoader == null) { 
    applicationClassLoader = ClassLoader.getSystemClassLoader(); 
} 
URL[] urls = ((URLClassLoader)applicationClassLoader).getURLs(); 
    for(int i=0; i < urls.length; i++) { 
     classpath.append(urls[i].getFile()).append("\r\n"); 
    }  
    System.out.println(classpath.toString()); 
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath*:**/applicationContext*.xml"); 
//org.springframework.context.ApplicationContext ctx = new FileSystemXmlApplicationContext("C:\\Documents and Settings\\BK\\workspace\\ModernSoft\\src\\main\\resources\\applicationContext.xml"); 
DataSource ds = (DataSource) ctx.getBean("dataSource", DataSource.class); 
String[] beans = ctx.getBeanDefinitionNames(); 

,하지만 여전히 나는이 유선 문제를 해결하지 못할. 도와주세요.

UPDATE : 내 pom.xml 파일

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>ModernSoft</groupId> 
    <artifactId>pl.modern</artifactId> 
    <version>0.0.1</version> 
    <name>ModernSoft</name> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
      </plugin> 
     </plugins> 
     <finalName>ModernSoft</finalName> 
    </build> 
    <dependencies> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.2.5.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>3.2.4.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.26</version> 
     </dependency> 

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

     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-jpa</artifactId> 
      <version>1.3.4.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.eclipse.persistence</groupId> 
      <artifactId>javax.persistence</artifactId> 
      <version>2.1.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>3.2.4.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>3.2.4.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-entitymanager</artifactId> 
      <version>4.2.0.Final</version> 
     </dependency> 



    </dependencies> 
</project> 

UPDATE Uberjar는 실행 jar 파일 후 내가 얻을 가 지금은 또 다른 문제가 마법처럼 작동합니다 또한

Exception in thread "main" org.springframework.beans.factory.parsing.BeanDefinitionParsingException: Configuration problem: Unable to lo 
cate Spring NamespaceHandler for XML schema namespace [http://www.springframework.org/schema/data/jpa]         
Offending resource: class path resource [applicationContext.xml]                   

     at org.springframework.beans.factory.parsing.FailFastProblemReporter.error(FailFastProblemReporter.java:68)      
     at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:85)           
     at org.springframework.beans.factory.parsing.ReaderContext.error(ReaderContext.java:80)           
     at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.error(BeanDefinitionParserDelegate.java:318)    
     at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1435) 

     at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1428) 

     at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentR 
eader.java:185)                               
     at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocu 
mentReader.java:139)                              
     at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocume 
ntReader.java:108)                              
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)  
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)   
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)   
     at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)   
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 
174)                                  
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 
209)                                  
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 
180)                                  
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java: 
243)                                  
     at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127) 

     at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93) 
     at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationCo 
ntext.java:130)                               
     at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:451)     
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)   
     at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)    
     at pl.modern.ModernSoft.main(ModernSoft.java:27) 

과 엔티티를 추가하거나 변경할 수 없습니다. 은 후 내가 최대 절전 모드

Hibernate: select max(id) from customers 

에서만 얻을 그러나 DB에 대한 기록은 최대 보여줍니다 customerDao.save (고객)를 확인하십시오.

+0

'pom.xml'에 모든 스프링 의존성이 있는지 확인하십시오. –

+0

이 오류는 컴파일 타임에 클래스가 있지만 런타임에는 나타나지 않을 때 발생합니다. 따라서 응용 프로그램을 실행하는 동안 필요한 모든 클래스가 있는지 확인하십시오. – ankit

+0

pom.xml을 추가했습니다. – user2746686

답변

2

나는 당신이 -classpath 옵션을 사용하여 클래스 경로에 포함해야 할 모든 단지를 지정해야합니다이 경우 java -jar를 사용하여 명령 줄에서 jar 파일을 실행하고 있다고 생각합니다.

또 다른 옵션은 Maven uber jar 사용하는 것입니다

(모든 depencies을 포함 항아리.)

+0

우 베쟈 르가 도왔습니다. 정말 고마워. 이제 나는 또 다른 문제가있다. (주요 질문에서) – user2746686

0

각각 자신의 spring.handlers를 포함하는 다양한 봄 항아리와 하나를 선택합니다 쉐이더/uberjar 플러그인을 의미 동일한 이름의 파일을 spring.schemas 그들과 다른 네임 스페이스는 작동하지 않을 것입니다.

충돌하는 파일을 병합하는 셰이더 플러그인 구성에 대해서는 Invalid or corrupt JAR File built by Maven shade plugin을 참조하십시오. 이 예제는 이상한 위치에 구성 요소가 있습니다. 내 버전은 다음과 같습니다.

관련 문제