RocketMQ,运行时报VM的一些选项错误,忽略后,运行报以下错误:
java.lang.IllegalAccessError: class org.apache.rocketmq.common.UtilAll (in unnamed module @0x5403f35f) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x5403f35f
at org.apache.rocketmq.common.UtilAll.viewed(UtilAll.java:720)
at org.apache.rocketmq.common.UtilAll.cleanBuffer(UtilAll.java:684)
at org.apache.rocketmq.store.logfile.DefaultMappedFile.cleanup(DefaultMappedFile.java:470)
at org.apache.rocketmq.store.ReferenceResource.release(ReferenceResource.java:63)
at org.apache.rocketmq.store.ReferenceResource.shutdown(ReferenceResource.java:47)
at org.apache.rocketmq.store.logfile.DefaultMappedFile.destroy(DefaultMappedFile.java:481)
at org.apache.rocketmq.store.index.IndexFile.destroy(IndexFile.java:97)
at org.apache.rocketmq.store.index.IndexService.load(IndexService.java:72)
下载了源码,最后定位到以下错误:
private static ByteBuffer viewed(ByteBuffer buffer) {
if (!buffer.isDirect()) {
throw new IllegalArgumentException("buffer is non-direct");
}
DirectBuffer dd=(DirectBuffer) buffer;//这句错了。
ByteBuffer viewedBuffer = (ByteBuffer) (dd).attachment();
if (viewedBuffer == null) {
return buffer;
} else {
return viewed(viewedBuffer);
}
}
看上去是ByteBuffer转换成DirectBuffer出错,怎么办?RocketMQ应该不会有此错误,是有什么选项要配置?JDK是最新版本。
看你那个报错信息,像是由于 JDK 9 或更高版本中的模块化系统引起的。
可以试试在启动脚本中添加以下参数:
--add-exports java.base/sun.nio.ch=org.apache.rocketmq.common
也可以试试将JDK升级到最新版本,以确保与RocketMQ兼容的JDK版本
如果上述方法无法解决问题,可以尝试使用 JDK 8 或更早版本,并确保运行时环境的设置正确。也可以尝试升级到最新版本的RocketMQ。
希望能帮到你~~~
RocketMQ,是刚下载的5.0版本。JDK是19。
启动脚本加到哪?我是Java初学者,官方下载的,配置文件只有 .....cmd文件、....conf文件 。不知道往哪加这个
--add-exports java.base/sun.nio.ch=org.apache.rocketmq.common
我发的错误,是下载了源码,找到最后错的位置。
仅供参考:
这个问题通常是由于Java 9或更高版本中的模块化系统引起的。您可以尝试在运行脚本中添加Java参数,以允许RocketMQ访问sun.nio.ch包,方法是使用 --add-exports 选项来打开该选项。您可以在启动脚本中的 JAVA_OPT 变量中添加以下行:
JAVA_OPT="${JAVA_OPT} --add-exports java.base/sun.nio.ch=org.apache.rocketmq.common"
如果您使用的是Windows,则可以将此行添加到 runserver.cmd 文件中。
如果这不起作用,请确保您使用的是最新版本的RocketMQ,并且在最新版本的JDK上运行RocketMQ。如果问题仍然存在,请检查您的JDK和RocketMQ版本是否兼容。如果您在运行RocketMQ之前安装了新版本的JDK,请确保您正确设置了JAVA_HOME和PATH变量。