2
头图

目前 RockerMQ 的最新版本是 4.9.2,这个版本在 Java 11 下是无法运行的:

[rocketmq@localhost 00-rocketmq-4.9.2]$ java -version
openjdk version "11.0.13" 2021-10-19 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.13+8-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.13+8-LTS, mixed mode, sharing)

[rocketmq@localhost 00-rocketmq-4.9.2]$ bin/mqnamesrv 
-Djava.ext.dirs=/jre/lib/ext:/home/rocketmq/00-rocketmq-4.9.2/bin/../lib:/lib/ext is not supported.  Use -classpath instead.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit

相关的 issue 在这里,目前已经被修复,该修复将于 4.9.3 版本发布。

我们可以看到,之所以运行失败,主要是因为启动脚本中的 JVM 参数问题。

说到这里我想劝各位发布类似开源项目的时候,脚本里面不要带上一大堆的 -XX: 调优参数,这些应该交给用户自己去调整,因为你不知道用户用的是什么 JVM,你不要强行帮用户去“优化”,只要留个口子就行了。

既然是脚本的问题,那么修改下脚本就可以了:

打开 runserver.shrunbroker.sh(Windows 下则是相应的 .cmd 后缀),做如下修改(修改前记得备份):

  1. 找到包含 -Djava.ext.dirs 参数的行,将该行删除或注释掉;
  2. 找到包含 -Xloggc 参数的行,将该行删除或注释掉;
  3. 找到包含 -XX:+UseGCLogFileRotation 参数的行,将该行删除或注释掉;
  4. 找到包含 export CLASSPATH= 的行(在文件的前面部分),将等号后面的内容改为 .:${BASE_DIR}/conf:${BASE_DIR}/lib/*:${CLASSPATH}
  5. 找到包含 -XX:-UseLargePages 参数的行,在它的下面添加一行 JAVA_OPT="${JAVA_OPT} --add-exports java.base/jdk.internal.ref=ALL-UNNAMED"

经过这样的修改,RocketMQ 就可以在 Java 11 下成功启动了。


捏造的信仰
2.8k 声望272 粉丝

Java 开发人员