Не удается найти дом Java
Я пишу приложение, которое использует jsvc
запустить службу Java в качестве демона. Мне нужно использовать что-то вроде jsvc
потому что мое приложение использует порты до 1024, и все же я бы не хотел запускать его как root, чтобы созданные файлы принадлежали другому пользователю. Я также хотел бы свести к минимуму зависимости и конфигурацию, чтобы все, что нужно клиенту, - это JVM и jsvc
бинарный установлен.
Тем не менее, кажется, что jsvc
имеет один главный улов; он не может обнаружить домашнюю папку Java в данной операционной системе Unix, что довольно неприятно:
$ ./startup.sh
Cannot locate Java home
Я смог обойти эту проблему в Ubuntu по крайней мере, вручную установив домашний каталог JVM:
jsvc ... -home /usr/lib/jvm/default-java/ ...
Есть ли способ динамически определить домашний каталог Java из скрипта Bash, чтобы я мог сделать это в большинстве Unixes/Linux? Я мог бы спать намного лучше ночью, делая что-то вроде:
JAVA_HOME="$( ... )"
jsvc ... -home "$JAVA_HOME" ...
... а не жесткое кодирование для каждой отдельной операционной системы. Есть ли способ, который, учитывая java
двоичный, я могу найти домашний каталог его JVM/JRE?
4 ответа
Не уверен, что это работает в *nixes, но нашел это решение:
JAVA_HOME="$( readlink -f "$( which java )" | sed "s:bin/.*$::" )"
Я протестировал его на Ubuntu, и он работает, однако он не работает для OSX.
Моим решением было компилировать нативный исходный код linux, как сказано на главной странице jsvc в http://commons.apache.org/proper/commons-daemon//jsvc.html
Вот моя пошаговая процедура
Загрузить www.fightrice.com/mirrors/apache/commons/daemon/source/commons-daemon-1.0.13-src.tar.gz
После того, как вы извлечете файл, перейдите в...../commons-daemon-1.0.13-src/src/native/unix
в терминале от имени root сделайте следующее:
$ support / buildconf.sh
$./configure --with-java = / usr / lib / jvm / default-java
$ make
тестовое сгенерированное jsvc двоичное приложение
$ ./jsvc -help
Оно работает! чисто.
Еще один способ:
type -p java
Ожидайте, что это вернет правильную папку установки JAVA.
Использование dirname
а также which
Команды для поиска каталога bin в Java:
echo `dirname \`which java\``
JAVA_HOME=`dirname \`which java\``
... работает только если Java уже включена $PATH
,