Запустите 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 должны иметь разрешения на выполнение.