目前 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.sh
和 runbroker.sh
(Windows 下则是相应的 .cmd 后缀),做如下修改(修改前记得备份):
- 找到包含
-Djava.ext.dirs
参数的行,将该行删除或注释掉; - 找到包含
-Xloggc
参数的行,将该行删除或注释掉; - 找到包含
-XX:+UseGCLogFileRotation
参数的行,将该行删除或注释掉; - 找到包含
export CLASSPATH=
的行(在文件的前面部分),将等号后面的内容改为.:${BASE_DIR}/conf:${BASE_DIR}/lib/*:${CLASSPATH}
- 找到包含
-XX:-UseLargePages
参数的行,在它的下面添加一行JAVA_OPT="${JAVA_OPT} --add-exports java.base/jdk.internal.ref=ALL-UNNAMED"
经过这样的修改,RocketMQ 就可以在 Java 11 下成功启动了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。