【Bug】Byzer all in one 在无java环境下启动失败,没有使用到默认的 jdk
ZhengshuaiPENG opened this issue · 3 comments
Bug RootCause
在执行 $BYZER_HOME/bin/byzer.sh start
时,会先通过 bin/header.sh
来进行系统中 java 的获取,在原有获取 java 逻辑中,会通过 /bin/get-properties.sh
来拿到 byzer.properites.override
中定义的 byzer.server.mode
来定义分支逻辑。但是 /bin/get-properties.sh
这个脚本就需要使用 java。 所以当系统中没有安装 java 的情况下,这里就陷入了一个互相依赖的状态,导致无法获取到 byzer-all-in-one 的内置 jdk。
另外在 /bin/get-properties.sh
以及 header.sh
的 isValidJavaVersion()
函数中调用 java 的时候,不是调用脚本自动寻找到的 java,而是直接调用了 java 命令,所以当 bash 里无法直接执行 java 时,这两个功能会break
Fix Design
- 将 java 的获取逻辑提前,然后export
$JAVA_HOME
&$JAVA
两个变量 - 在后续脚本逻辑中任意地方需要调用 java 命令的地方,使用
$JAVA
变量声明的 java 进行替代 - 获取 java 的逻辑根据 MAC 和 Linux 两个环境进行分支处理:
- 优先尝试获取系统变量中的
$JAVA_HOME
, 找到$JAVA_HOME/bin/java
, 将其赋值给$JAVA
变量 - 如果系统环境变量没有声明
$JAVA_HOME
, 则尝试使用java
命令,然后自动找出$JAVA_HOME
以及$JAVA_HOME/bin/java
, 并将$JAVA_HOME/bin/java
赋值给$JAVA
变量 - 如果上述两条路径都无法找到 java, 则尝试寻找
${BYZER_HOME}/jdk8
, 使用内置的 jdk - 最后上述都无法找到 java,则报错退出
- 优先尝试获取系统变量中的
Test Evidence
环境准备
至此环境准备完毕
测试流程
1. case 1: 直接启动 byzer 引擎
期待结果: 引擎顺利启动,由于系统没有安装 java, 所以使用的应该是内置 jdk8
**2. case 2: 将 jdk 安装至/opt/jdk8/
目录,并 export JAVA_HOME=
/opt/jdk8, 重启 byzer 引擎** 期待结果: 引擎顺利启动,由于系统声明了环境变量, 所以使用的应该是
/opt/jdk8`
3. export 一个错误的java home,重启 byzer 引擎
期待结果:启动失败,并报错 java home 不正确
4. 不设置 JAVA_HOME, 将 java 通过软连接的方式,将添加到环境可执行的位置 /usr/local/bin
,重启 byzer 引擎
期待结果:启动成功,并能真实的找到 java home