无法找到Java home

时间:2012-08-30 22:07:40

标签: java linux unix jsvc

我正在编写一个利用jsvc启动Java服务作为守护进程的应用程序。我需要使用类似jsvc的东西,因为我的应用程序使用1024以下的端口,但我真的不想以root身份运行它,以便创建的文件归其他用户所有。我还希望将依赖关系和配置保持在最低限度,以便所有客户端需求都是JVM并安装了jsvc二进制文件。

然而,似乎jsvc有一个主要问题;它无法在给定的Unix操作系统上检测到Java的主文件夹,这非常令人沮丧:

$ ./startup.sh
Cannot locate Java home

我至少可以通过手动设置JVM主目录来解决Ubuntu上的问题:

jsvc ... -home /usr/lib/jvm/default-java/ ...

有没有办法从Bash脚本中动态确定Java主目录,这样我就可以在大多数Unix / Linux上使用它?我晚上可以睡得更好,比如:

JAVA_HOME="$( ... )"

jsvc ... -home "$JAVA_HOME" ...

...而不是对每个操作系统进行硬编码。有没有一种方法,给定java二进制文件,我可以找到其JVM / JRE的主目录?

4 个答案:

答案 0 :(得分:5)

不确定这是否适用于* nixes,但找到了这个解决方案:

JAVA_HOME="$( readlink -f "$( which java )" | sed "s:bin/.*$::" )"

我在Ubuntu上测试了它并且它可以工作,但它不适用于OSX。

答案 1 :(得分:3)

我的解决方案是编译本机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

有效!干净。

答案 2 :(得分:0)

使用dirnamewhich命令查找Java的bin目录:

echo `dirname \`which java\``
JAVA_HOME=`dirname \`which java\``

...仅当Java已经在$PATH上时才有效。

答案 3 :(得分:0)

另一种方式是:

 type -p java

期望这样可以返回正确的JAVA安装文件夹。