#java #jdbc #jar #executable-jar
#java #maven #jar #cmd
Вопрос:
У меня есть файл jar с манифестом в нем
Manifest-Version: 1.0
Build-Jdk: 1.7.0_67
Created-By: Apache Maven 3.2.3
Main-Class: com.company.main.Main
Archiver-Version: Plexus Archiver
И jar имеет зависимость от компиляции для внешней библиотеки
compile 'org.apache.commons:commons-lang3:3.3.2'
Итак, я хочу выполнить его в командной строке, которую я написал:
java -cp C:commons-lang3-3.3.2.jar -jar myJar-1.0.0.jar
Но
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
at ...
Как добавить этот файл в путь к классу?
PS. Если я использую «плохой способ» и копирую-вставляю commons-lang3-3.3.2.jar в папке …jre7 lib ext. Все работает.
Ответ №1:
Если вы не используете опцию -jar, вам нужно указать основной класс для запуска, так как манифест не будет опрошен:
java -cp C:commons-lang3-3.3.2.jar;.myJar-1.0.0.jar com.company.main.Main
Параметр classpath (-cp) игнорируется при использовании параметра -jar (в этом случае манифест должен ссылаться на любые другие требуемые jar-файлы через директиву classpath).
Комментарии:
1. спасибо за объяснение альтернативы -jar. Перебрал 5-6 похожих вопросов, чтобы получить эту информацию.
Ответ №2:
«Плохой способ» ..? Вы никогда не должны включать свои файлы jar в каталоги java.. Как вы ожидаете, что пользователи вашего приложения будут использовать ваш jar, когда они используют стандартную java ..?
либо вы можете использовать команду, предложенную @tombola82, либо вы можете включить jar-файл commons-lang в сам свой проект, чтобы вы могли ссылаться на него.