Запустите JAR-файл из командной строки и укажите путь к classам

Я скомпилировал JAR- файл и указал Main-Class в манифесте (я использовал функцию Eclipse Export ). Мои зависимости находятся в каталоге с именем lib . Я не могу получить прямой ответ о том, как выполнить мой JAR-файл, указав, что он должен использовать lib/* как путь к classам.

Я пробовал:

 ]$ java -jar -cp .:lib/* MyJar.jar ]$ java -cp .:lib/* -jar MyJar.jar ]$ java -cp .:lib/* com.somepackage.subpackage.Main 

и т.д…

Каждый из них дает ошибку:

Error: Could not find or load main class ....

или дает NoClassDefFoundError указывающий, что библиотеки не найдены.

Я даже попытался переделать JAR-файл и включил в него каталог и содержимое lib , но все равно не купил …

Как я могу выполнить JAR-файл из командной строки и указать путь к classам?

Когда вы укажете -jar параметр -jar будет проигнорирован.

Из документации :

Когда вы используете этот параметр, JAR-файл является источником всех пользовательских classов, а другие параметры пути к пользовательскому classу игнорируются.

Вы также не можете «включить» необходимые файлы jar в другой файл jar (вам нужно будет извлечь их содержимое и поместить файлы .class в ваш файл jar)

У вас есть два варианта:

  1. включите все файлы jar из каталога lib в манифест (вы можете использовать относительные пути там)
  2. Укажите все ( включая банку) в командной строке с помощью -cp :
    java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

Запустите файл jar и укажите путь к нему следующим образом:

 java -cp  com.test.App 

jar_name.jar – полное имя JAR, которое вы хотите выполнить

libs/* – это путь к вашим JAR зависимым

com.test.App – это полное имя classа из JAR, имеющего main(String[]) метод main(String[])

В банке и зависимой банке должны быть разрешения на выполнение.

Вы можете сделать это в оболочке unix:

 java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main 

Вы можете сделать это в windows powershell:

 java -cp "MyJar.jar;lib\*" com.somepackage.subpackage.Main 

Кроме того, используйте манифест, чтобы указать class и основной class, если вам нравится, поэтому вам не нужно использовать -cp или указать основной class. В вашем случае он будет содержать следующие строки:

 Main-Class: com.test.App Class-Path: lib/one.jar lib/two.jar 

К сожалению, вам нужно указать каждую банку в манифесте (не biggie, как вы делаете только один раз, и вы можете использовать скрипт для создания файла или использовать инструмент построения, например ANT или Maven или Gradle). И ссылка должна быть относительной или абсолютной директорией, где вы запускаете java -jar MyJar.jar .

Затем выполните его с помощью

 java -jar MyJar.jar 
  • Запуск одиночного теста из classа JUnit с использованием командной строки
  • Как передать аргумент командной строки gnuplot?
  • R и системные вызовы
  • Аргументы ввода и командной строки пользователя
  • xcopy файл, переименовать, подавить сообщение «Does xxx указать имя файла ...»
  • Как анализировать вывод командной строки из c #?
  • запуск командной строки, содержащей Pipes, и вывод результата в STDOUT
  • Узнайте, если файл старше 4 часов в пакетном файле
  • Аргументы для основного в C
  • Как запустить TestNG из командной строки
  • Удалить последнюю строку из файла в Bash
  • Давайте будем гением компьютера.