ZooKeeper启动时报错:JAVA_HOME is not set

时间:2024-03-24 08:56:45
情景再现:win7系统,jdk1.8,安装完成后启动Zookeeper

很明显,就是说我得jdk路径没有设置,这个的确,jdk1.8已经不需要设置路径了。java -version当然是存在的。
1.最直接的方式就是去环境变量中添加JAVA_HOME
2.另一种方式,在zkServer.cmd启动的时候,会找%JAVA_HOME%\bin\java.jar 进行java基础环境的启动。所以,zkService启动的时候肯定是对 JAVA_HOME进行了验证。
zkServie启动的时候:

  1. 启动加载了zkEvn文件
  2. 启动zkService文件
    也就是说,在zkEvn文件里可能有JAVA_HOME的验证,于是我们可以看到:
@echo off
REM Licensed to the Apache Software Foundation (ASF) under one or more
REM contributor license agreements.  See the NOTICE file distributed with
REM this work for additional information regarding copyright ownership.
REM The ASF licenses this file to You under the Apache License, Version 2.0
REM (the "License"); you may not use this file except in compliance with
REM the License.  You may obtain a copy of the License at
REM
REM     http://www.apache.org/licenses/LICENSE-2.0
REM
REM Unless required by applicable law or agreed to in writing, software
REM distributed under the License is distributed on an "AS IS" BASIS,
REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
REM See the License for the specific language governing permissions and
REM limitations under the License.

set ZOOCFGDIR=%~dp0%..\conf
set ZOO_LOG_DIR=%~dp0%..
set ZOO_LOG4J_PROP=INFO,CONSOLE

REM for sanity sake assume Java 1.6
REM see: http://java.sun.com/javase/6/docs/technotes/tools/windows/java.html

REM add the zoocfg dir to classpath
set CLASSPATH=%ZOOCFGDIR%

REM make it work in the release
SET CLASSPATH=%~dp0..\*;%~dp0..\lib\*;%CLASSPATH%

REM make it work for developers
SET CLASSPATH=%~dp0..\build\classes;%~dp0..\build\lib\*;%CLASSPATH%

set ZOOCFG=%ZOOCFGDIR%\zoo.cfg

@REM setup java environment variables

if not defined JAVA_HOME (
  echo Error: JAVA_HOME is not set.
  goto :eof
)

set JAVA_HOME=%JAVA_HOME:"=%

if not exist "%JAVA_HOME%"\bin\java.exe (
  echo Error: JAVA_HOME is incorrectly set.
  goto :eof
)

REM strip off trailing \ from JAVA_HOME or java does not start
if "%JAVA_HOME:~-1%" EQU "\" set "JAVA_HOME=%JAVA_HOME:~0,-1%"
 
set JAVA="%JAVA_HOME%"\bin\java

很明显我们能看到对JAVA_HOME的判断,所以我们可以在这里把JAVA_HOME写死。

只需要在

if not defined JAVA_HOME

前面添加

 set JAVA_HOME=D:\Program Files\Java\jdk1.8.0_151

然后运行 zkServie.cmd,成功运行!
ZooKeeper启动时报错:JAVA_HOME is not set
为了代码的简洁:

set JAVA_HOME=%JAVA_HOME:"=%

这里以及之后的代码都可以删除。