运行iDempiere客户端执行adempiere-client.sh报java不存在错误如何解决
问题现象
执行iDempiere客户端启动脚本adempiere-client.sh时抛出如下错误:
adempiere-client.sh: 20: /usr/lib/jvm/openlogic-openjdk-11-hotspot-amd64/bin/java/bin/java: not found
根因判断
报错里拼接出的Java执行路径存在明显冗余:正常JDK的可执行文件调用逻辑是$JAVA_HOME/bin/java,当前错误路径多拼了一层/bin/java,本质是JAVA_HOME变量配置错误,误将JDK下java可执行文件的完整路径当成了JDK根目录赋值给了JAVA_HOME。
排查步骤
- 先确认系统内OpenJDK11的实际安装路径,执行命令:
正常输出会包含java可执行文件的完整路径,类似sudo update-alternatives --list java/usr/lib/jvm/openlogic-openjdk-11-hotspot-amd64/bin/java,由此可确定JDK根目录为/usr/lib/jvm/openlogic-openjdk-11-hotspot-amd64。 - 打开
adempiere-client.sh脚本,定位到第20行附近的Java调用逻辑,确认脚本读取JAVA_HOME变量的来源,是脚本内硬编码赋值,还是读取系统全局环境变量。
解决方法
- 修正JAVA_HOME配置:
- 如果是脚本内硬编码了JAVA_HOME,直接把赋值内容改为正确的JDK根目录:
JAVA_HOME=/usr/lib/jvm/openlogic-openjdk-11-hotspot-amd64 - 如果是读取系统全局环境变量,找到对应配置文件(常见为
/etc/profile、~/.bashrc、/etc/environment),将其中错误的JAVA_HOME值(带/bin/java后缀的路径)替换为上述JDK根目录路径,修改完成后执行source 对应配置文件路径让配置立即生效。
注意:JAVA_HOME只需要指向JDK安装的根目录即可,不需要指向bin目录,更不需要指向java可执行文件本身,启动脚本会自动拼接/bin/java后缀生成最终执行路径。
- 如果是脚本内硬编码了JAVA_HOME,直接把赋值内容改为正确的JDK根目录:
- 验证配置有效性:执行命令
$JAVA_HOME/bin/java -version,如果能正常输出OpenJDK 11的版本信息,说明路径配置正确。 - 若验证时提示权限不足,执行如下命令给java可执行文件添加执行权限:
sudo chmod +x /usr/lib/jvm/openlogic-openjdk-11-hotspot-amd64/bin/java - 重新执行
adempiere-client.sh脚本即可正常启动客户端。
内容的提问来源于stack exchange,提问作者tonikostov
相关产品推荐
相关产品推荐

