Netty 运行时验证,NioEventLoopGroup
Netty Verify on runtime, NioEventLoopGroup
我一直在调试我的环境,突然间我收到了 Netty 的验证错误。
Netty的版本是4.1.46.Final,JavaJDK版本是11 compile and runtime.
我使用 Guice,但除了初始化这个 class 之外,它对 netty 部分没有任何作用,不久前我在另一个项目设置中也遇到了这个错误,而我根本没有使用 Guice。
我试过使caches/restarting无效,-U用maven更新我的依赖,甚至卸载intellij,以及-noverify什么都不做。
我的代码:
class LoginService @Inject constructor() : AbstractIdleService()
{
private lateinit var bootstrap : ServerBootstrap
@Inject private lateinit var configuration: RSEEnvironment
@Inject private lateinit var channelHandler: LoginChannelHandler
private val bossGroup = NioEventLoopGroup(1)
private val workerGroup = NioEventLoopGroup(Runtime.getRuntime().availableProcessors())
private lateinit var future: ChannelFuture
override fun startUp()
{
val hostAddress = configuration.getString("default_host")
val hostPort = configuration.getInt("default_port")
bootstrap = ServerBootstrap()
bootstrap
.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel::class.java)
.childHandler(channelHandler)
.option(ChannelOption.SO_KEEPALIVE, true)
.option(ChannelOption.TCP_NODELAY, true)
future = bootstrap.bind(hostAddress, hostPort).syncUninterruptibly()
future.channel().closeFuture().sync()
}
override fun shutDown()
{
workerGroup.shutdownGracefully()
}
@Provides fun fetchEnvironment() = RSEEnvironment()
}
错误:
Caused by: java.lang.VerifyError: class io.netty.channel.SingleThreadEventLoop overrides final method io.netty.util.concurrent.SingleThreadEventExecutor.pendingTasks()I
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:145)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:37)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:77)
at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:96)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:91)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:72)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:44)
at rs.emulator.service.login.LoginService.<init>(LoginService.kt:25)
at rs.emulator.service.login.LoginService$$FastClassByGuice$$f37422b6.newInstance(<generated>)
------------更新--------
如果我在我的项目中创建另一个模块并只执行基本代码,它在同一个 Maven 父级上工作正常。
这听起来像是 class 路径问题。在我看来,您在 class 路径上有多个版本的 netty。确保只有一个。
我一直在调试我的环境,突然间我收到了 Netty 的验证错误。
Netty的版本是4.1.46.Final,JavaJDK版本是11 compile and runtime.
我使用 Guice,但除了初始化这个 class 之外,它对 netty 部分没有任何作用,不久前我在另一个项目设置中也遇到了这个错误,而我根本没有使用 Guice。
我试过使caches/restarting无效,-U用maven更新我的依赖,甚至卸载intellij,以及-noverify什么都不做。
我的代码:
class LoginService @Inject constructor() : AbstractIdleService()
{
private lateinit var bootstrap : ServerBootstrap
@Inject private lateinit var configuration: RSEEnvironment
@Inject private lateinit var channelHandler: LoginChannelHandler
private val bossGroup = NioEventLoopGroup(1)
private val workerGroup = NioEventLoopGroup(Runtime.getRuntime().availableProcessors())
private lateinit var future: ChannelFuture
override fun startUp()
{
val hostAddress = configuration.getString("default_host")
val hostPort = configuration.getInt("default_port")
bootstrap = ServerBootstrap()
bootstrap
.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel::class.java)
.childHandler(channelHandler)
.option(ChannelOption.SO_KEEPALIVE, true)
.option(ChannelOption.TCP_NODELAY, true)
future = bootstrap.bind(hostAddress, hostPort).syncUninterruptibly()
future.channel().closeFuture().sync()
}
override fun shutDown()
{
workerGroup.shutdownGracefully()
}
@Provides fun fetchEnvironment() = RSEEnvironment()
}
错误:
Caused by: java.lang.VerifyError: class io.netty.channel.SingleThreadEventLoop overrides final method io.netty.util.concurrent.SingleThreadEventExecutor.pendingTasks()I
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:800)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:698)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:621)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:145)
at io.netty.channel.nio.NioEventLoopGroup.newChild(NioEventLoopGroup.java:37)
at io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(MultithreadEventExecutorGroup.java:77)
at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:96)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:91)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:72)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:52)
at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:44)
at rs.emulator.service.login.LoginService.<init>(LoginService.kt:25)
at rs.emulator.service.login.LoginService$$FastClassByGuice$$f37422b6.newInstance(<generated>)
------------更新--------
如果我在我的项目中创建另一个模块并只执行基本代码,它在同一个 Maven 父级上工作正常。
这听起来像是 class 路径问题。在我看来,您在 class 路径上有多个版本的 netty。确保只有一个。