Java, используя "-cp" и "-jar" вместе
Folks,
Ранее у меня был только один файл jar, и манифест был настроен так, чтобы я мог просто запустить свою программу как:
java -jar MyApp.jar
Теперь я разделил свою функциональность на два файла jar - MyCore.jar и MyApp.jar.
Следующая команда работает:
java -cp "*" com.mycompany.mypackage.App
Но я не могу заставить работать следующее
java -cp "*" -jar MyApp.jar
Я получаю ClassNotFoundException.
Я предпочитаю использовать переключатель "-jar". Есть ли способ заставить его работать?
Спасибо заранее за вашу помощь.
С Уважением,
Питер
4 ответа
У меня есть файл Manifest.mf, как это.
Manifest-Version: 1.0
Main-Class: com.mycompany.mypackage.App
Class-Path: MyApp.jar MyCore.jar log4j.jar
Вы можете просто добавить любые jar-файлы, которые вам нужны, в строку Class-Path. Затем, пока банки находятся в пути к классам, вы можете запустить команду java -jar без -cp.
В соответствии с документацией Java Cli вы не можете объединить -cp и -jar в одной команде
-jar Запустить программу, инкапсулированную в архиве JAR. Первым аргументом является имя файла JAR вместо имени класса запуска. Чтобы эта опция работала, манифест файла JAR должен содержать строку вида Main-Class:classname. Здесь classname идентифицирует класс, имеющий открытый статический метод void main(String[] args), который служит отправной точкой вашего приложения. Обратитесь к справочной странице инструмента Jar и следу Jar Учебного руководства по Java для получения информации о работе с файлами Jar и манифестами файла Jar. Когда вы используете эту опцию, файл JAR является источником всех пользовательских классов, а другие параметры пути к классам пользователей игнорируются. Обратите внимание, что для файлов JAR, которые можно запускать с опцией "java -jar", могут быть установлены разрешения на выполнение, поэтому они могут запускаться без использования "java -jar". См. Архивные файлы Java (JAR).
Чтобы решить эту проблему, вам необходимо убедиться, что манифест в вашем jar-приложении ссылается как на класс, содержащий основной файл, так и на путь к классам.
Предполагая, что оба файла JAR находятся в одной папке и com.mycompany.mypackage.App
является основным классом приложения, попробуйте эту команду:
java -cp MyCore.jar;MyApp.jar com.mycompany.mypackage.App
Это должно работать для вас.
Если вы настаиваете на использовании -jar
переключиться (почему?), тогда вам нужно изменить файл манифеста, чтобы добавить Class-Path
ключ и укажите путь ко всем связанным JAR-файлам. Это делает ваше приложение менее гибким в случае, если файлы jar не упакованы с файлом jar основного приложения.
Добавьте манифест, который оба определяет класс, содержащий main()
а также путь к классу. См. Работа с файлами манифеста: Добавление классов в путь к классам JAR-файла для получения дополнительной информации.
Тогда все приложение. может быть запущен с помощью -jar
без необходимости -cp
,