java – io.netty.buffer.PooledByteBufAllocator的NoClassDefFoundError
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – io.netty.buffer.PooledByteBufAllocator的NoClassDefFoundError,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4009字,纯文字阅读大概需要6分钟。
内容图文
我创建了一个用java中的Achilles Object映射编写的Cassandra客户端(使用IntelliJ Gradle).我的客户端在IntelliJ中本地工作正常,但在docker容器中部署时抛出异常.我目前在我的docker容器中遇到以下异常.
java.lang.NoClassDefFoundError: Could not initialize class
io.netty.buffer.PooledByteBufAllocator at
com.datastax.driver.core.NettyOptions.afterBootstrapInitialized(NettyOptions.java:144)
at
com.datastax.driver.core.Connection$Factory.newBootstrap(Connection.java:903)
at
com.datastax.driver.core.Connection$Factory.access$100(Connection.java:751)
at com.datastax.driver.core.Connection.initAsync(Connection.java:139)
at
com.datastax.driver.core.Connection$Factory.open(Connection.java:807)
at
com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:252)
at
com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:201)
at
com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:79)
at
com.datastax.driver.core.Cluster$Manager.negotiateProtocolVersionAndConnect(Cluster.java:1631)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1549)
at com.datastax.driver.core.Cluster.init(Cluster.java:160) at
com.datastax.driver.core.Cluster.connectAsync(Cluster.java:342) at
com.datastax.driver.core.Cluster.connectAsync(Cluster.java:317) at
com.datastax.driver.core.Cluster.connect(Cluster.java:259) at
java.util.Optional.orElseGet(Optional.java:267) at
info.archinnov.achilles.configuration.ArgumentExtractor.initSession(ArgumentExtractor.java:186)
at
info.archinnov.achilles.configuration.ArgumentExtractor.initConfigContext(ArgumentExtractor.java:96)
at
info.archinnov.achilles.bootstrap.AbstractManagerFactoryBuilder.buildConfigContext(AbstractManagerFactoryBuilder.java:60)
at
info.archinnov.achilles.generated.ManagerFactoryBuilder.build(ManagerFactoryBuilder.java:38)
at
com.ds.db.cassandra.AchillesClient.(AchillesClient.java:22)
at
com.ds.message.RabbitMQMsgClient$1.open(RabbitMQMsgClient.java:114)
at
org.apache.flink.api.common.functions.util.FunctionUtils.openFunction(FunctionUtils.java:36)
但是,类,io.netty.buffer.PooledByteBufAllocator是其中的一部分
netty-buffer-4.0.56.Final.jar已经是classpath的一部分.
当我尝试从我的Intellij IDE本地测试东西时,一切正常.
但是在部署之后,我在我的docker容器中遇到了这个问题.
该服务在我的docker容器中启动,如下所示:
java -server
-XX:HeapDumpPath=/opt/ds/srv/diagnostics/msgreader-1589749851-2s89z.heapdump
-Xmx614m -Xms614m -XX:MaxMetaspaceSize=126M -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -XX:CICompilerCount=4 -XX:MaxGCPauseMillis=1000 -XX:+DisableExplicitGC -XX:ParallelGCThreads=4 -Dsun.net.inetaddr.ttl=60 -XX:OnOutOfMemoryError=kill -9 %p -Djava.library.path=/usr/local/lib -Djava.net.preferIPv4Stack=true -Dapp.dir=/opt/ds/sw/apps/msgreader -Dserver.name=msgreader -Dlog.dir=/opt/ds/var/log/msgreader -cp /opt/ds/sw/apps/javacontainer/resources:/opt/ds/sw/apps/msgreader/lib/*:/opt/ds/sw/apps/msgreader/resources:/opt/ds/sw/apps/javacontainer/lib/*
com.ds.msg.Server start
从上面的cmd中,您可以注意到提到类路径的-cp参数.此路径包含netty-buffer-4.0.56.Final.jar.
我后来发现netty-all-4.0.51.Final.jar也是类路径的一部分,这个jar也包含相同的类文件.我甚至试图去除罐子,所有可能的组合.但我仍面临同样的问题.
即使在jar文件的多个版本的情况下,我们应该得到NoSuchMethodError,任何人都可以帮助我理解这个问题.
解决方法:
我终于找到了答案,这个问题就是我在问题中猜到的.同一个罐子的多个版本导致了失败.为了找到它,我在gradle文件中使用了以下内容:
apply plugin: 'project-report'
跑了,
gradle htmlDependencyReport
它将为我们提供关于依赖树的良好HTML报告.我们甚至可以使用下面的cmd,但很难跟进多模块gradle项目
gradle dependencies
在HTML报告中,我发现achilles-core模块依赖于netty-buffer-4.0.56.Final.jar而另一个模块依赖于netty-all-4.0.51.Final.jar.
所以当我在build.gradle中尝试以下achilles时,事情进展顺利:
06003
由于netty-all-4.0.51.Final.jar已经有了achilles对象映射所需的类,我的项目开始进行部署.
失败的另一个原因,即使从docker容器中删除重复的jar文件后:
(硬)重新启动pod,然后创建一个新的pod,它从docker repo中提取相同的Dockerimage.
IntelliJ如何在本地运行时解决PATH问题:/
内容总结
以上是互联网集市为您收集整理的java – io.netty.buffer.PooledByteBufAllocator的NoClassDefFoundError全部内容,希望文章能够帮你解决java – io.netty.buffer.PooledByteBufAllocator的NoClassDefFoundError所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。