2012-06-01 2 views
6

나는 main 방법을 실행하도록되어 쉘 스크립트를 실행하고하는 것은사용하여 와일드 카드

Exception in thread "main" java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext 
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext 
     at java.net.URLClassLoader$1.run(URLClassLoader.java:200) 
     at java.security.AccessController.doPrivileged(Native Method) 
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:303) 
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248) 
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) 

이 봄 있기 때문이다 항아리는 다른 폴더에 있습니다. 그래서 스크립트를 변경했습니다 :

java -classpath /path/to/app/conf/lib/nameJar*:/path/to/app/lib/spring* com.example.ClassTest 

그러나이 스크립트를 사용하면 com.example.ClassTest를 찾을 수 없습니다. 이 문제에 대한 아이디어가 있습니까?

미리 감사드립니다.

답변

10

자바 클래스 패스 와일드 카드 확장이 드문 :

처럼 "자바"명령을들이받은 때 (\ libs가 말 c) 및 "java.ext.dirs"를 사용 한 위치에 필요한 모든 항아리를 넣어 . 에서

docs :

이해 클래스 경로는 모든 파일의 목록을 지정 에 동등한 것으로 간주되는 기본 이름의 와일드 카드 문자 *를 포함 할 수

클래스 경로 항목을 와일드 카드 디렉토리 .jar 또는 .JAR. 예를 들어, 클래스 경로 항목 foo/*는 foo라는 디렉토리에있는 모든 JAR 파일을 지정합니다. *로만 구성된 classpath 항목은 현재 디렉토리의 모든 jar 파일 목록으로 확장됩니다.

그럼, 당신은 지정해야하는 것입니다 :

java -classpath /path/to/app/conf/lib/*:/path/to/app/lib/* 

당신이 특정 단지를해야하는 경우에는 개별적으로 추가해야합니다. 클래스 경로 문자열 자세한 내용은 읽기 Setting multiple jars in java classpathspring*

, nameJar*, *.jar 같은 일반적인 와일드 카드를 허용하지 않습니다.

0

것 같습니다. 스프링 관련 JARS를 찾을 수 없습니다.

java -Djava.ext.dirs=c:/libs com.example.ClassTest 
+1

classpath에 속하는 일반 jar에는'java.ext.dirs'을 사용하지 않을 것입니다. –