2009-09-04 70 views
1

我遇到了javamail 1.4.2 api和jdk/jre 1.6.0u16的一個奇怪的錯誤。我已經在jdk和jre文件夾中放置瞭解壓縮的javamail-1.4.2文件夾(以及MySQL Connector-J 5.1.7),如下面的%classpath%所示。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.

您可以在JAR file指定Class-Path attribute說:「指定的擴展或庫,[你]應用程序或擴展需求的相對URL。」

+0

我會試試看,但我應該如何放置路徑?我是否將兩個jar文件添加到主程序的jar中並添加它們而沒有路徑?或者有沒有辦法用jar文件之外的相對路徑來做到這一點? – 2009-09-04 20:53:28

+0

經過一番搗鼓之後,指定的類路徑最終成爲解決方案。 – 2010-09-28 03:38:49

1

當使用-jar,JAVA覆蓋類路徑設置(-cp)。但是,在此配置中,可以在jar的清單文件中指定classpath jar。

+0

我會試試這個,但我應該如何放置路徑?我是否將兩個jar文件添加到主程序的jar中並添加它們而沒有路徑?或者有沒有辦法用jar文件之外的相對路徑來做到這一點? – 2009-09-04 20:03:40

+0

只需將它們添加到jar本身的相對路徑即可。其實,爲什麼你把這些罐子放在JDK主頁的ext分區裏呢?這是一個非常奇怪的地方,讓他們,伊莫。如果你只是把jar文件放在lib/ext中,它們會自動被拾取。 – jsight 2009-09-08 04:55:14

0

我已經經歷了類似的問題(不等同於你的,因爲我的是春天有關的),發現這個鏈接是有幫助的:

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

看來,在JDK實現的變更可能造成這種行爲。從鏈接引用:

「我設法在我的Mac開發盒上使用Java 6(1.6.0_07)重現了這個問題,然後我在我的Mac上使用Java 5嘗試了它,並且無法重現問題。在Java 5的情況下,JVM將使用javax.activation API和來自1.1.1 javax激活包的實現,而在Java 6中,它將使用它們來自JRE(JRE的任何部分優先於dm服務器的lib目錄中有什麼)然後我在Ubuntu的機器上嘗試了這個應用程序,這次使用Java 6 1.6.0_10,我無法重現這個問題。

和/但是: - 。

「我剛剛有同樣的問題,‘沒有對象DCH的MIME類型’,但Ubuntu的Java版本‘1.6.0_13’所以我不知道該怎麼你們通過升級到1.6.0_11來解決它 我所做的就是將mailcab.default複製到我自己的包中,它工作正常,似乎是一個我尚未完全理解的類加載問題。