Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > ClassLoader,import,java -jar |
Автор: esi 8.6.2009, 16:57 |
Есть небольшое приложение с использованием сторонних библиотек (например log4j.jar), упакованное в main.jar. Использованные в main.jar библиотеки (например log4j.jar) находятся рядом, используются через import org.apache.log4j.Logger;. Необходимо предоставить простой механизм запуска java -jar, без возникновения NoClassDefFoundError. Любая попытка передачи параметра -cp либо добавление в Manifest атрибута Class-Path игнорируются. Вопрос: можно ли это осуществить, или необходимо отказаться от import в пользу динамической загрузки Class.forName? Как лучше всего реализовать идею? |
Автор: tux 8.6.2009, 17:37 |
Что значит игнорируется? Значит неправильно указаны подгружаемые библиотеки. Если планируется запускать приложение используя Main-Class в манифесте, тогда и библиотеки нужно указывать в манифесте. Если класс задается в командной строке, то и библиотеки должны быть перечислены в -cp в командной строке. Сейчас как это делается? |
Автор: esi 8.6.2009, 17:56 |
Запуск через java -jar -cp: java -cp log4j.jar -jar main.jar программа запускается, почти сразу после этого падает с ошибкой java.lang.NoClassDefFoundError: org/apache/log4j/Logger, насколько я помню, при запуске java -jar параметр -cp игнорируется. При указании Class-Path все работает, действительно неправильно указал имя файла. |
Автор: tux 8.6.2009, 18:44 | ||
Совершенно верно. если запускать таким образом, то classpath берется из манифеста. Если запустить так, то все должно работать:
|