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

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

Я пробовал:

]$ 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 файл из командной строки и указать путь к классам?

Ответ 1

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

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

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

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

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

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

Ответ 2

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

java -cp <jar_name.jar:libs/*> com.test.App

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

libs/* - это путь к вашим JARs зависимостей

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

Jar и зависимая jar должны иметь разрешения на выполнение.