📜  “警告:不推荐使用 JAVA_HOME,请使用 ES_JAVA_HOME”“在“C:\Program Files\Java\jdk1.8.0_241\bin\java.exe”的 JAVA_HOME 中找不到 java” - Java (1)

📅  最后修改于: 2023-12-03 15:21:25.766000             🧑  作者: Mango

警告:不推荐使用 JAVA_HOME,请使用 ES_JAVA_HOME

如果你在使用 Elasticsearch 或其他基于 Elasticsearch 的软件时遇到了下面这个错误:

在“C:\Program Files\Java\jdk1.8.0_241\bin\java.exe”的 JAVA_HOME 中找不到 java

那说明你使用了错误的环境变量名。正确的环境变量名应该为 ES_JAVA_HOME,而不是 JAVA_HOME

背景

在 Elasticsearch 5.0 版本之前,官方文档中建议使用环境变量 JAVA_HOME 来指定 JVM 的路径。这是因为早期的 Elasticsearch 版本使用的是类似于 Maven 的启动脚本,该脚本会读取 JAVA_HOME 环境变量来确定所使用的 JVM 版本。

然而,自 Elasticsearch 5.0 版本起,官方文档已经更新,不再推荐使用 JAVA_HOME 环境变量。相反,现在应该使用 ES_JAVA_HOME 环境变量来指定 Elasticsearch 所使用的 JVM 路径。

解决方案

如果你遇到了上述错误,那么你需要停止 Elasticsearch 进程,然后修改启动 Elasticsearch 的脚本。在脚本中,你需要把 JAVA_HOME 替换为 ES_JAVA_HOME

具体来说,如果你使用的是 Linux 系统,那么你需要找到 bin/elasticsearch 脚本,把其中的以下行:

# resolve links - $0 may be a softlink
PRG="$0"

替换为:

# resolve links - $0 may be a softlink
readonly ES_HOME="$(cd "$(dirname "$0")/../.."; pwd -P)"
readonly ES_JAVA_HOME="${ES_JAVA_HOME:-$JAVA_HOME}"

其中的 readonly ES_JAVA_HOME="${ES_JAVA_HOME:-$JAVA_HOME}" 就是将原来的 JAVA_HOME 改为了 ES_JAVA_HOME

如果你使用的是 Windows 系统,那么你需要找到 bin\elasticsearch.bat 脚本,把其中的以下行:

if not defined JAVA_HOME (
  set JAVA=java
) else (
  set JAVA="%JAVA_HOME%\bin\java"
)

替换为:

if not defined ES_JAVA_HOME (
  set JAVA=java
) else (
  set JAVA="%ES_JAVA_HOME%\bin\java"
)

同样地,这一行就是将原来的 JAVA_HOME 改为了 ES_JAVA_HOME

结论

为了避免出现上述错误,建议使用正确的环境变量名 ES_JAVA_HOME。如果你已经使用了错误的环境变量名 JAVA_HOME,那么你需要根据上述解决方案进行修改。