我使用的是 Debian 12 服务器,附带 JDK 17。我也在服务器上安装了 openJDK 11。 Cassandra 版本是 4.0.10。
我想将 Cassandra 指向 JDK 11,同时将系统的默认 Java 版本保留为 JDK 17,但我无法这样做。
使用 update-alternatives,如果我将 JDK11 设置为首选手动选项,Cassandra 启动得很好。
但是,当我将 JAVA_HOME 设置为 cassandra sh 文件中的 JDK 11 路径并将 java 替代项设置为 JDK 17 时,Cassandra 启动失败并显示:
致命:Cassandra 无法访问所需的类。这通常意味着它是在没有标准启动脚本帮助的情况下运行的,或者脚本已被编辑。如果这是故意的,并且您尝试使用 Java 11+,您可能需要从 jvm11-server.options 或 jvm11-client.options 添加 --add-exports 和 --add-opens jvm 选项
详细步骤:
默认 Java 是 JDK 11:
update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 auto mode
* 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 manual mode
Press <enter> to keep the current choice[*], or type selection number:
JAVA_HOME 在 Cassandra conf 文件中被注释掉。
Cassandra 已启动并运行。
节点工具排水口
我的 CASSANDRA_HOME 是 /usr/local/cassandra/apache-cassandra-4.0.10/ 。编辑以下文件以将 JAVA_HOME 设置为 /usr/lib/jvm/java-11-openjdk-amd64:
/usr/local/cassandra/apache-cassandra-4.0.10/local-cassandra.in.sh
/usr/local/cassandra/apache-cassandra-4.0.10//bin/cassandra.in.sh
/usr/local/cassandra/apache-cassandra-4.0.10//tools/bin/cassandra.in.sh
update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
0 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 auto mode
* 1 /usr/lib/jvm/java-11-openjdk-amd64/bin/java 1111 manual mode
2 /usr/lib/jvm/java-17-openjdk-amd64/bin/java 1711 manual mode
Press <enter> to keep the current choice[*], or type selection number: 0
update-alternatives: using /usr/lib/jvm/java-17-openjdk-amd64/bin/java to provide /usr/bin/java (java) in auto mode
which java
/usr/bin/java
java --version
openjdk 17.0.10 2024-01-16
OpenJDK Runtime Environment (build 17.0.10+7-Debian-1deb12u1)
OpenJDK 64-Bit Server VM (build 17.0.10+7-Debian-1deb12u1, mixed mode, sharing)
错误 [main] 2024-04-04 03:31:04,973 FileUtils.java:106 - 致命:Cassandra 无法访问所需的类。这通常意味着它是在没有标准启动脚本帮助的情况下运行的,或者脚本已被编辑。如果这是故意的,并且您尝试使用 Java 11+,您可能需要从 jvm11-server.options 或 jvm11-client.options 添加 --add-exports 和 --add-opens jvm 选项
不知道如何解决这个问题。我应该在哪里添加 jvm 选项(不确定这是否能解决问题)。我是否缺少任何步骤?任何帮助深表感谢!谢谢你
我已经用 JEnv 做到了这一点,我强烈推荐它。它允许您为特定目录指定 Java 版本。绝对可以更轻松地使用特定版本的 Java 运行不同版本的 Cassandra。