无法找到Java home

Naf*_*Kay 7 java unix linux jsvc

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

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

$ ./startup.sh
Cannot locate Java home
Run Code Online (Sandbox Code Playgroud)

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

jsvc ... -home /usr/lib/jvm/default-java/ ...
Run Code Online (Sandbox Code Playgroud)

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

JAVA_HOME="$( ... )"

jsvc ... -home "$JAVA_HOME" ...
Run Code Online (Sandbox Code Playgroud)

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

Naf*_*Kay 5

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

JAVA_HOME="$( readlink -f "$( which java )" | sed "s:bin/.*$::" )"
Run Code Online (Sandbox Code Playgroud)

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