JavaMail ClassNotFound
Я столкнулся со странной ошибкой в javamail 1.4.2 api и jdk/jre 1.6.0u16. Я поместил разархивированную папку javamail-1.4.2 (вместе с MySQL Connector-J 5.1.7, также необходимой) в папки jdk и jre, как в%classpath% ниже.
.; "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"
Я получаю следующее сообщение об ошибке:
Исключение в потоке "main" java.lang.NoClassDefFoundError: javax/mail/MessagingException в gamelab.inventory.GameLabInventory.main(GameLabInventory.java:62). Вызывается: java.lang.ClassNotFoundException: javax.mail.MessagingException.URLClassLoader$1.run(неизвестный источник) на java.security.AccessController.doPrivileged(собственный метод) на java.net.URLClassLoader.findClass(неизвестный источник) на java.lang.ClassLoader.loadClass(неизвестный источник) на sun.misc.Launcher$AppClassLoader.loadClass(неизвестный источник) в java.lang.ClassLoader.loadClass(неизвестный источник) в java.lang.ClassLoader.loadClassInternal(неизвестный источник) ... еще 1
Я не могу найти ничего плохого в моей настройке здесь, надеюсь, вы, ребята, можете мне помочь. Спасибо!
Вот файл манифеста:
Manifest-Version: 1.0
Main-Class: gamelab.inventory.GameLabInventory
3 ответа
Согласно документации для Java-инструмента:
Когда вы используете опцию [-jar], файл JAR является источником всех пользовательских классов, а другие параметры пути к классам пользователей игнорируются.
Вы можете указать в своем JAR-файле атрибут Class-Path, который "указывает относительные URL-адреса расширений или библиотек, которые необходимы [вашему] приложению или расширению".
При использовании -jar java переопределяет настройку classpath (-cp). В этой конфигурации, однако, jar classpath может быть указан в файле манифеста вашего jar.
У меня возникла похожая проблема (не похожая на вашу, так как моя связана с весной), и я нашел эту ссылку полезной:
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 и реализацию из комплекта активации javax 1.1.1, тогда как в Java 6 он будет использовать их из JRE (все, что является частью JRE, имеет приоритет над тем, что находится в каталоге lib сервера dm Server). затем попробовал приложение на коробке Ubuntu, на этот раз используя Java 6 1.6.0_10. Я не смог воспроизвести проблему ".
и / но: -
"У меня только что была такая же проблема:" Нет объекта DCH для MIME-типа ", но в Ubuntu java версии"1.6.0_13". Поэтому я не знаю, как вы, ребята, решили ее путем обновления до 1.6.0_11. скопируйте mailcab.default в мой собственный пакет, и он сработал. Кажется, это проблема загрузки классов, которую я пока не до конца понимаю ".