2009-09-04 8 views
1

javamail 1.4.2 api 및 jdk/jre 1.6.0u16에서 이상한 오류가 발생했습니다. 아래의 % classpath %에서와 같이 jdk 및 jre 폴더에 압축 해제 된 javamail-1.4.2 폴더 (MySQL Connector-J 5.1.7도 필요함)를 배치했습니다.JavaMail ClassNotFound

.;"C:\Program Files\Java\jdk1.6.0-16\jre\lib\ext\mysql-connector-java-5.1.7-bin";"C:\Program Files\Java\jdk1.6.0-16\jre\lib\ext\javamail-1.4.2\mail.jar";"C:\Program Files\Java\jdk1.6.0_16\bin";"C:\Program Files\GameLabInventory\GameLabInventory-7.0.jar";"C:\Program Files\Java\jre6\lib\ext\mysql-connector-java-5.1.7-bin";"C:\Program Files\Java\jre6\lib\ext\javamail-1.4.2\mail.jar";

하지만 명령

C:\Program Files\Java\jre6\bin>java -cp %classpath% -jar "C:\Program Files\GameLabInventory\GameLabInventory_7.0.jar" 

내 컴파일 된 항아리를 실행할 때 다음과 같은 오류 메시지가 얻을 :

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/MessagingException at gamelab.inventory.GameLabInventory.main(GameLabInventory.java:62) Caused by: java.lang.ClassNotFoundException: javax.mail.MessagingException 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) at java.lang.ClassLoader.loadClassInternal(Unknown Source) ... 1 more

여기 내 설치 문제 아무것도 찾을 수 있습니다, 잘하면 너희들이 나를 도울 수있어. 감사!

Manifest-Version: 1.0 
Main-Class: gamelab.inventory.GameLabInventory 

Here is the jar -tvf (link)

답변

1

java tool에 대한 설명서에 따르면

When you use [the -jar] option, the JAR file is the source of all user classes, and other user class path settings are ignored.

당신은 "확장 또는 라이브러리 [당신] 응용 프로그램 또는 확장 요구의 상대 URL을 지정합니다."당신의 JAR fileClass-Path attribute을 지정할 수 있습니다

+0

나는 이것을 시험해 볼 것이다. 그러나 나는 그 길을 어떻게 넣어야합니까?두 개의 jar 파일을 주 프로그램의 jar 파일에 추가하고 경로없이 추가합니까? 또는 jar 파일 외부의 상대 경로를 사용하여이를 수행하는 방법이 있습니까? –

+0

한 무리의 바이올린으로 인해 결국 지정된 클래스 경로가 해결책이되었습니다. –

1

-jar 사용 자바 클래스 경로 설정 (-cp)를 재정의 :

여기 매니페스트 파일이다. 그러나이 구성에서는 classpath jar를 jar의 매니페스트 파일에 지정할 수 있습니다.

+0

나는 이것을 시험해 볼 것이지만 어떻게 경로를 넣어야합니까? 두 개의 jar 파일을 주 프로그램의 jar 파일에 추가하고 경로없이 추가합니까? 또는 jar 파일 외부의 상대 경로를 사용하여이를 수행하는 방법이 있습니까? –

+0

Jar 자체에 상대 경로를 추가하기 만하면됩니다. 사실, 왜 JDK 가정의 ext 서브 디렉토리에 이러한 jar 파일을 넣고 있습니까? 그걸 넣을 정말 이상한 곳 이네. jar 파일을 lib/ext에 넣으면 자동으로 선택됩니다. – jsight

0

나는 (나의 봄 관련 있기 때문에, 당신 동일하지 않음) 비슷한 문제를 경험하고이 링크가 도움이되었다 발견했습니다

http://forum.springsource.org/showthread.php?t=65840&page=3

는 JDK의 구현 변화가있을 것으로 보인다 이 문제가 발생합니다. 링크에서 인용 :

"Java 6 (1.6.0_07)을 사용하여 Mac 개발 상자에서 문제를 재현 할 수있었습니다. Java 5를 사용하여 Mac에서 시험해 보았지만 문제를 재현 할 수 없었습니다. Java 5의 경우 JVM은 javax.activation API와 1.1.1 javax 활성화 번들의 구현을 사용하지만 Java 6에서는 JRE의 일부를 사용합니다 (JRE의 일부는 우선 적용됩니다). dm Server의 lib 디렉토리에있는 것들). 이번에는 Java 6 1.6.0_10을 사용하여 Ubuntu 상자에서 응용 프로그램을 시험해 보았습니다. 문제를 재현 할 수 없었습니다. "

및 /하지만 -.

없음 객체 MIME 유형에 대한 DCH "하지만 우분투 자바 버전"1.6.0_13 ""난 그냥이 같은 문제를 했어 "그래서 나도 몰라 어떻게 너희들 1.6.0_11로 업그레이드하여 해결했습니다. mailcab.default를 내 번들로 복사하면 효과적이었습니다. 아직 완전히 이해하지 못하는 클래스 로딩 문제인 것 같습니다. "

관련 문제