Как выполнить файл jar с внешней зависимостью с помощью командной строки в Windows?

#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 в сам свой проект, чтобы вы могли ссылаться на него.