Не удается найти дом 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,

Другие вопросы по тегам