Командная строка Java с внешним .jar

Я разрабатываю проект, используя .jar для повторного использования кода.

Итак, у меня есть .jar с именем TOOLS.jar, и я разрабатываю простое приложение в файле HelloWorld.java, которое ссылается на мой пакет TOOLS из TOOLS.jar.

Я компилирую с помощью этой командной строки:

javac -g -d C:\MyApp -cp TOOLS.jar HelloWorld.java

Это успешно, и когда я хочу выполнить свое приложение, я использую эту команду (я в папке C:\MyApp):

java -cp <path>\TOOLS.jar;. HelloWorld

Это успешно, но мой вопрос:

Как выполнить приложение, если у меня есть несколько внешних файлов .jar?

Должен ли я добавлять каждую команду с опцией -cp?

Есть ли способ сгенерировать только один двоичный файл и выполнить его (как .exe с программами на C)?


person TheFrancisOne    schedule 20.05.2011    source источник


Ответы (2)


Объедините каждый аргумент файла jar с cp с помощью:

; on Windows
: on Linux or Mac

e.g.

java -cp <path>\TOOLS.jar;.;<path>\jar2.jar;<path>\jar3.jar HelloWorld

на более новых JVM (я думаю, 6+) вы также можете использовать * для добавления всех JAR в каталог, например.

java -cp .;<path>\*; HelloWorld

Чтобы сделать еще один шаг и создать один упакованный исполняемый файл, см. этот вопрос.

person Joel    schedule 20.05.2011
comment
для меня, по крайней мере, ваше использование . тут сначала немного смутило. вы используете их в разных местах объединенных аргументов, и без объяснения это может сбить читателя с толку. . необходим, потому что по умолчанию текущий каталог находится в пути к классам; но если мы указываем путь к классам явно, мы должны убедиться, что текущий каталог явно включен. - person Paul; 23.05.2016

Если у вас много jar-файлов в одной папке и вы не хотите добавлять их в путь к классам вручную. Вы можете использовать .bat для Windows или оболочку для Linux.

cpappend.bat от tomcat

rem ---------------------------------------------------------------------------
rem Append to CLASSPATH
rem
rem $Id: cpappend.bat 301115 2002-08-04 18:19:43Z patrickl $
rem ---------------------------------------------------------------------------

rem Process the first argument
if ""%1"" == """" goto end
set CLASSPATH=%CLASSPATH%;%1
shift

rem Process the remaining arguments
:setArgs
if ""%1"" == """" goto doneSetArgs
set CLASSPATH=%CLASSPATH% %1
shift
goto setArgs
:doneSetArgs
:end

И еще один файл bat, который использует оператор «for», чтобы добавить весь файл jar в путь к классам.

set CURRENT_DIR=%cd%
set CLASSPATH=.
for %%i in (%CURRENT_DIR%\lib\*.jar) do call cpappend.bat %%i
start java -Duser.dir=%CURRENT_DIR%  -cp %CLASSPATH% a.b.c.MainApp
person Terry Ma    schedule 20.05.2011