Looking for java Keywords? Try Ask4Keywords

Java Language Запуск приложения Java с зависимостями библиотеки


пример

Это продолжение примеров «основного класса» и «исполняемого JAR» .

Типичные Java-приложения состоят из кода, специфичного для приложения, и другого многократного кода библиотеки, который вы реализовали или который был реализован третьими лицами. Последние обычно называются библиотечными зависимостями и обычно упаковываются в виде файлов JAR.

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

  • Приложение и его зависимости можно переупаковать в один JAR-файл, содержащий все необходимые классы и ресурсы.

  • JVM может быть рассказано, где найти зависимые файлы JAR через путь к среде выполнения.

Для исполняемого JAR-файла путь класса выполнения задается атрибутом манифеста класса-класса. (Редакционное примечание: это должно быть описано в отдельной теме в команде jar .) В противном случае путь к классам выполнения должен быть предоставлен с использованием параметра -cp или с помощью переменной среды CLASSPATH .

Например, предположим, что у нас есть приложение Java в файле «myApp.jar», чей класс точки входа com.example.MyApp . Предположим также, что приложение зависит от библиотечных JAR-файлов «lib / library1.jar» и «lib / library2.jar». Мы могли бы запустить приложение, используя команду java как показано в командной строке:

$ # Alternative 1 (preferred)
$ java -cp myApp.jar:lib/library1.jar:lib/library2.jar com.example.MyApp

$ # Alternative 2
$ export CLASSPATH=myApp.jar:lib/library1.jar:lib/library2.jar
$ java com.example.MyApp

(В Windows, вы должны использовать ; вместо того , чтобы : как разделитель пути к классам, и вы должны установить (локальный) CLASSPATH переменную используя set , а не export .)

В то время как разработчику Java было бы удобно с этим, оно не «удобно». Поэтому обычной практикой является написать простой сценарий оболочки (или пакетный файл Windows), чтобы скрыть детали, о которых пользователю не нужно знать. Например, если вы поместили следующий сценарий оболочки в файл под названием «myApp», сделали его исполняемым и поместили его в каталог по пути поиска команд:

#!/bin/bash
# The 'myApp' wrapper script

export DIR=/usr/libexec/myApp
export CLASSPATH=$DIR/myApp.jar:$DIR/lib/library1.jar:$DIR/lib/library2.jar
java com.example.MyApp

то вы можете запустить его следующим образом:

$ myApp arg1 arg2 ...

Любые аргументы в командной строке будут переданы Java-приложению через расширение "$@" . (Вы можете сделать что-то подобное с пакетным файлом Windows, хотя синтаксис отличается.)