Можно ли вызвать исполняемый файл .jar без использования полного пути? - PullRequest
11 голосов
/ 02 июня 2009

У меня есть файл .jar, который я бы хотел вызывать, не используя полный путь к его местоположению.

Например, если файл .jar находится по адресу: /some/path/to/thearchive.jar

Я бы хотел запустить его с:

java -jar thearchive.jar

вместо:

java -jar /some/path/to/thearchive.jar

когда я в другом месте дерева каталогов. В моем конкретном случае я использую Mac с установленной OS X 10.5.7. Версия Java "1.5.0_16". Я попытался добавить "/ some / path / to" в PATH, JAVA_HOME и CLASSPATH, но это не сработало.

Итак, как мне настроить запуск .jar из командной строки, не используя его полный путь?

ОБНОВЛЕНИЕ: еще один аргумент, с которым нужно иметь дело. Например:

java -jar /some/path/to/thearchive.jar arg1 arg2

Это может повлиять на то, как решается вопрос, как указано в ответах ниже.

Ответы [ 7 ]

5 голосов
/ 02 июня 2009

Нет, ты не можешь.

Запуск jar с -jar не требует какого-либо механизма classpath, поскольку файл jar равен classpath.

В качестве альтернативы используйте псевдоним оболочки для запуска jar или небольшого файла сценария.

3 голосов
/ 02 июня 2009

Согласно Солнцу :

java -jar app.jar

Чтобы запустить приложение из файла JAR, который находится в другом каталоге, нам нужно указать путь к этому каталогу, как показано ниже: java -jar path/app.jar

где путь - путь к каталогу, в котором находится этот app.jar.

Так что либо выведите путь в «стандартной» переменной среды, либо определите оболочку, которая будет в вашем PATH

3 голосов
/ 02 июня 2009

Вы можете добавить переменную для хранения каталога:

export JARDIR=/some/path/to
java -jar $JARDIR/thearchive.jar

Я не уверен, что вы можете сделать это из переменных среды неявно.

1 голос
/ 02 июня 2009

Я не верю в это. Если в вашем CLASSPATH указан jar, вы можете просто вызвать java с указанием основного класса. (т.е. java com.test.Main) В качестве альтернативы вы можете создать псевдоним в вашей оболочке для выполнения команды

alias execJar="java -jar /some/path/to/thearchive.jar"

Или другой вариант - создать скрипт-обертку для его выполнения.

0 голосов
/ 27 сентября 2012

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

Другой подход может заключаться в использовании сценария оболочки zsh для получения такого поведения:

~ / .scripts / java # .scripts на более ранней позиции в переменной $ PATH, чем сама java

#!/usr/bin/env zsh
# get -jar option and remove from $@ (-D option)
zparseopts -D jar:=jarname 
if [ -e $JAR_PATH/$jarname[2] ];
then
    java -jar $JAR_PATH/$jarname[2] $@
elif [ -e $jarname[2] ];
then
    java -jar $jarname[2] $@
else
    java $@
fi

Преимущество zparseopts состоит в том, что он может удалить параметр -jar, но все остальные параметры сохраняются в $ @.

Дальнейшим улучшением будет расширение bash-creation или zsh-complete для опции команды java -jar. Например, завершение bash java -jar ограничивает списки файлов файлами * .jar. Для удобного использования кто-то может расширить это, не только просматривая текущий путь, но и $ JAR_PATH. В качестве отправной точки см. Следующий вопрос unix.sx .

Но и это решение выглядит не слишком хорошо.

0 голосов
/ 25 апреля 2012

Чтобы запустить файл .jar без ввода полного пути, вы можете поместить его в путь к классам и запустить, набрав:

java fullclassname arg1 arg2

Библиотека разработчика Mac OSX рекомендует 'дополнительные файлы jar, которые должны быть помещены в системный путь к классам, должны быть помещены в папку /Library/Java/Extensions. Вы также можете поместить их в свою собственную папку Library/Java/Extensions, но вам, вероятно, придется создавать папки Java и Extensions.

Если вы не знаете полного имени основного класса в своем файле .jar, вы можете развернуть его и посмотреть в файле MANIFEST.MF в папке META-INF. Линия Main-Class: сообщит вам.

Так, например, чтобы запустить saxon9he.jar , поместите его в /Library/Java/Extensions, и вы можете набрать (из любой папки)

java net.sf.saxon.Transform arg1 arg2...

Почти так же мало, как набирать java -jar jarfile.jar arg1 arg2, и вам не нужно менять переменные окружения.

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

0 голосов
/ 02 июня 2009

Сама система Java не дает вам возможности указать что-то вроде JAR_PATH (список мест для поиска jar-файлов). В других ответах используются возможности оболочки MAC / Unix:

  1. Установка переменной среды
  2. Установка псевдонима
  3. Возможно использование символической ссылки (на файл или на каталог).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...