2011-09-02 2 views
4

javax.mail .jar 파일을 사용하여 메일 메시지를 읽습니다. 하지만 코드를 실행하면 다음 예외가 발생합니다.javax.mail.MessagingException을 얻는 중

classpath에 mail.jar을 추가했습니다.

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/MessagingE 
xception 
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) 
Could not find the main class: MasterProcess. Program will exit. 

이 문제 좀 해결하기 위해 어떤 suggetionsn ... 당신은 MessagingException을받지 못하고있어

+0

mail.jar이 클래스 경로에 있습니까? 신청서를 어떻게 시작 했습니까? – Thomas

+0

나는 명령 프롬프트를 통해 실행한다 : – ramesh

+0

javac -cp % classpath % Test.java 다음 java -cp 명령을 사용한다. 응용 프로그램을 실행하기위한 테스트 – ramesh

답변

1

는 VM은 아마 비록MessagingException (그것은을 찾고 것을 찾을 수 불평 왜냐하면 그것을 버리고 싶어하기 때문입니다. 그러나 그것들은 나중에 문제가됩니다).

실제로 mail.jar에이 클래스가 실제로 있는지 확인하고 mail.jar이 실제로 클래스 경로에 있는지 확인하십시오.

마지막으로 일어날 수있는 일은 클래스가 Java 버전과 호환되지 않는다는 것입니다. 예를 들어 1.5 용으로 컴파일 된 클래스는 1.4에서 실행되지 않습니다.

+0

예, My mail.jar에 MessagingException 클래스가 있습니다. – ramesh

+0

내 대답을 편집하여 다른 가능성을 제시했습니다. –

+1

java 1.6 버전을 사용 중이며 mail.jar는 1.4.1입니다. 나는이 mail.jar이 java1.6과 호환된다고 생각한다. – ramesh

0

activation.jar 항아리도 있어야합니다.

혹시 앱 서버 (예 : Jboss)로 작업하고 있습니까? 그렇다면 클래스 로딩 모델을 확인하십시오 (jboss에서 단일 클래스로드 모델로 최신 버전의 jar 파일을로드하지 않을 수 있습니다).)

+0

응용 프로그램 서버를 사용하지 않고 명령 프롬프트를 통해 실행 중입니다 – ramesh

+0

스크립트를 통해 테스트를 실행합니까? 아니면 일부 IDE (Eclipse)를 사용하고 있습니까? Java Mail Api AFAIK는 자체 jar 및 활성화 프레임 워크를 사용합니다. 물론 Windows 사용자의 적절한 CLASSPATH 구문 (;으로 구분 기호로) 그리고 실제로는 항아리를 읽을 수 있는지 확인하십시오. 또한 올바른 java/javac (java/javac -version 사용)를 실행하고 있는지 확인하십시오. – BigMike

+0

Eclipse IDE에서 잘 작동하는지 확인하십시오. 하지만 내가 명령 프롬프트에서 실행하려고 할 때 나는이 예외를 얻고있다. – ramesh

0

나는 또한 같은 오류가 발생했습니다. 컴파일하는 동안 나는 항아리를 올바르게 사용했습니다. 커맨드 라인에서 그것을 실행하는 동안 mail.jar (javamail API)가 포함되어 있지 않은 것으로 나타났습니다.

1

이클립스에서 작업하고 명령 줄에는 명확하게 프로젝트에 여러 버전의 메일 병이 있다고합니다.

예 :

당신은 3 개 항아리, 항아리 X, 항아리 Y와 항아리 Z를

이 경우 메일 항아리에 당신이 알고있는 JAR X가 이미 JAR의 Z 내부에 번들로 제공 될 수 있습니다 밖으로

(하지만 일부가 다른 버전.

그래서 같은 항아리의 여러 버전을 가지고있는 문제가 무엇인가? 당신은 두 개의 서로 다른 버전을 가지고 프로젝트에서 참조 될 알 수 없습니다. (당신이 어떤 클래스를 찾고 있습니다 그렇다면 프로젝트의 mail-2.jar에서 f가 아닌 클래스를 가져옵니다. 클래스 로더에 의해 mail-1.jar에 대한 참조가 만들어지면 ound 예외가 발생합니다.)

이클립스에서는 어떻게 작동합니까? 당신은 거기에 명령 순서에 대한 옵션이 있다는 것을 알 수 있습니다. 이것들은 같은 순서로 참조 될 것입니다. 명령 프롬프트에서 우리가 lib/*를로드 할 때 사용합니다. lib가 먼저로드됩니다.

문제를 확인하고 문제를 해결하는 방법은 무엇입니까?

옵션 1 : 당신이 그들에 무엇을보고 사용하는 libs와의

참조 문서 페이지/사용 설명서.

옵션 2 : Eclipse에서

  1. 클래스 경로 위해 TOP에 (여기 mail.jar) 문제의 JAR를 이동합니다. (귀하의 프로그램은 현재 작동해야합니다)
  2. 오류가 발생한 곳을 하나씩 차례로 확인하십시오. (이 문제의 원인이되는 항아리를 찾으려면 중복 참조)

  3. 중복 참조가있는 항아리를 추출하여 JAR 내부의 중복을 제거하고 다시 포장하십시오. (필요한 경우)

관련 문제