Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > ClassNotFoundException |
Автор: Proger89 14.10.2010, 00:19 | ||||||||
Доброго времени суток. У меня довольно избитая проблема. Но я в упор не понимаю, что я делаю не так. У меня есть приложение которое использует библиотелку log4j. Перед её запуском я устанавливаю CLASSPATH командой
Вот код программы:
В pom.xml я устанавливаю Main-Class для генерации манифеста
После этого запуская свой jar файл
Почему так получается, если CLASSPATH установлен и содержит нужный jar файл и все от чего данный файл зависит написано в MANIFEST? Заранее благодарен |
Автор: jk1 14.10.2010, 08:01 |
А в pom.xml у Вас log4j описан как зависимость (dependency)? |
Автор: Proger89 14.10.2010, 09:27 | ||||
Да описан. Вот:
А вот что генерирует Maven в манифесте
|
Автор: Alexandr87 14.10.2010, 09:35 |
в начале функции main вызовете следующую команду System.out.println(System.getProperty("java.class.path")); убедитесь, что java действительно подцепила classpath |
Автор: Skipy 14.10.2010, 09:36 | ||
Команда java -jar игнорирует любые установки classpath - что через командную строку, что через переменную окружения CLASSPATH. http://download.oracle.com/javase/6/docs/technotes/tools/windows/java.html - опция -jar:
В этом случае все зависимости должны быть прописаны в манифесте, в разделе Class-Path, и только в относительных путях. Вот тут расписано, как работать с jar-файлами: http://download.oracle.com/javase/tutorial/deployment/jar/index.html P.S. Использование CLASSPATH - вообще не лучшее решение. |
Автор: Proger89 14.10.2010, 09:36 | ||||
Все. Проблема решилась. Дело в том, что при запуске jar файла java не ищет другие jar-ники в установленном в системе CLASSPATH она проверяет только то что написано в манифесте. А в манифесте написано:
то есть оно будет в текущей директории искать папку log4j и дальше по пути, а так как её не было, оно выбрасывало исключение. Но все таки... Почему если я указал зависимости мавену, почему он сам не скопировал нужные библиотеки? Добавлено через 2 минуты и 16 секунд
Спасибо за ответ и за ссылки. ![]() Но разве Maven не должен делать эту работу? То есть устанавливать Class-Path в jar-нике и складывать нужные ему библиотеки? |
Автор: Skipy 14.10.2010, 09:48 | ||
Сложно сказать. Maven - это вообще вещь в себе. При создании war - да, он все копирует. А вот с простым приложением - боюсь, надо дополнительные телодвижения делать, типа создания binary-with-dependencies артефакта. |