Включение всех JAR-файлов из директории в classpath Java
Как включить все jar-файлы из директории в classpath?
Я пытаюсь запустить программу с помощью команды java -classpath lib/*.jar:. my.package.Program
, но она не может найти классы, которые определенно есть в этих jar-файлах. Нужно ли мне добавлять каждый jar-файл в classpath отдельно?
5 ответ(ов)
При работе с Java под Windows вы можете использовать следующую команду:
java -cp "Test.jar;lib/*" my.package.MainClass
Однако если вы попробуете использовать:
java -cp "Test.jar;lib/*.jar" my.package.MainClass
то это не сработает. Обратите внимание, что в этом случае используется *.jar
, и всё равно необходимо использовать одиночный символ * без других символов.
На Linux ситуация немного иная. Здесь вы можете использовать:
java -cp "Test.jar:lib/*" my.package.MainClass
При этом разделители между элементами путей — это двоеточия вместо точек с запятой.
Чтобы обойти эту проблему, мы развернули основной JAR файл myapp.jar
, который содержит манипуляцию (Manifest.mf
), указывающую путь к классам с необходимыми зависимыми JAR файлами, которые размещаются рядом с ним. В этом случае вам нужно просто выполнить команду java -jar myapp.jar
, чтобы запустить код.
Если вы развернули основной JAR в какую-то директорию, а зависимые JAR файлы поместили в папку lib
, то файл манифеста будет выглядеть следующим образом:
Manifest-Version: 1.0
Implementation-Title: myapp
Implementation-Version: 1.0.1
Class-Path: lib/dep1.jar lib/dep2.jar
Обратите внимание: это является независимым от платформы решением - мы можем использовать одни и те же JAR файлы для запуска на UNIX сервере или на компьютере под управлением Windows.
Ваше решение для Ubuntu 10.04, используя java-sun 1.6.0_24 с всеми JAR-файлами в директории "lib", выглядит следующим образом:
java -cp .:lib/* my.main.Class
Если это не сработает, попробуйте следующую команду, которая выведет все JAR-файлы в директории lib в параметр classpath:
java -cp $(for i in lib/*.jar ; do echo -n $i: ; done). my.main.Class
Эти команды позволяют вам указать все необходимые библиотеки при запуске вашего Java-приложения.
Вам нужно запустить Java-приложение с использованием file.jar
и всех файлов из директории dir
. Обратите внимание на различия в синтаксисе команд для Windows и Linux.
Для Windows используйте следующую команду:
java -cp file.jar;dir/* my.app.ClassName
Здесь ;
является разделителем путей, и кавычки не обязательны, если аргумент -cp
не содержит пробелов.
Для Linux команда будет выглядеть так:
java -cp file.jar:dir/* my.app.ClassName
В этом случае :
— это разделитель путей. Убедитесь, что вы используете правильный разделитель в зависимости от операционной системы.
Вы можете попробовать воспользоваться параметром -Djava.ext.dirs=jarDirectory
при запуске Java. Этот параметр указывает директорию для внешних JAR-файлов. Более подробную информацию можно найти в документации Oracle по следующей ссылке: Java Extension Mechanism.
Как изменить цвет вывода echo в Linux
Инициализация ArrayList в одну строчку
Что значит "Не удалось найти или загрузить основной класс"?
Почему в RecyclerView отсутствует onItemClickListener()?
Что значит 'synchronized'?