记一次netty版本冲突,报java.lang.NoSuchMethodError: io.netty.util.internal.ObjectUtil.checkPositive的问题

elasticsearch 5.6中使用TransportClient初始化抛异常

在引入elasticsearch5.6的transportclient包中,会引入netty进行通信。

<!-- transport客户端 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.1</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>

由于项目中会用到rocketmq,rocketmq也会自带有netty

<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>4.0.0-incubating</version>
</dependency>

用jetty启动没问题,但用tomcat报错:java.lang.NoSuchMethodError: io.netty.util.internal.ObjectUtil.checkPositive

看来tomcat处理包冲突没有jetty好

可以在项目pom文件所在目录,通过mvn dependency:tree 命令,查看包之间的依赖,通过查看包中的方法,发现rocketmq自带的netty包确实没有此方法,es中的nettty版本

低于rocketmq中的netty版本。

注意:mvn dependency:tree -Dverbose -Dincludes=asm:asm 类似的命令可以找到重复的jar包引用

解决办法:

1.在pom中直接引用netty4.13

         <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.13.Final</version>
        </dependency>

经过引入上面的jar,冲突解决。

2.在初始化transportClient方法前添加

// 设置环境变量,解决Es的netty与Netty服务本身不兼容问题
System.setProperty("es.set.netty.runtime.available.processors", "false");

第二种方法没试,但应该行的通。

以上是问题和解决方案。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ps:后来在初始化transportClient过程中,报错:

java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]

java.lang.IllegalStateException: availableProcessors is already set to [4], rejecting [4]
at io.netty.util.NettyRuntime$AvailableProcessorsHolder.setAvailableProcessors(NettyRuntime.java:51)
at io.netty.util.NettyRuntime.setAvailableProcessors(NettyRuntime.java:87)
at org.elasticsearch.transport.netty4.Netty4Utils.setAvailableProcessors(Netty4Utils.java:87)
at org.elasticsearch.transport.netty4.Netty4Transport.<init>(Netty4Transport.java:115)
at org.elasticsearch.transport.Netty4Plugin.lambda$getTransports$0(Netty4Plugin.java:84)
at org.elasticsearch.client.transport.TransportClient.buildTemplate(TransportClient.java:176)
at org.elasticsearch.client.transport.TransportClient.<init>(TransportClient.java:262)
at org.elasticsearch.transport.client.PreBuiltTransportClient.<init>(PreBuiltTransportClient.java:128)

解决办法:

在初始化之前加上System.setProperty("es.set.netty.runtime.available.processors", "false");

最后问题解决。

原文地址:https://www.cnblogs.com/tanglc/p/9381280.html

时间: 2024-08-28 20:15:42

记一次netty版本冲突,报java.lang.NoSuchMethodError: io.netty.util.internal.ObjectUtil.checkPositive的问题的相关文章

Hadoop-1,web页面调用报无hbase.jar包【以解决】 2,报java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem;【以解决】

1:web页面调用报无hbase.jar包 本来java文件就没有问题,但是jsp一调用那个java文件里的方法就报错,报的无hadoop/hbase相关报的问题. 主要解决方法是: 复制hbase/lib里面的jar包到hadoop的lib文件里 然后再打开hadoop/etc/hadoop/hadoop-env.sh 增加这一句: 1 export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/usr/local/hbase/lib/*:/usr/lib/hbase

关于java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.makeAccessible

<span style="font-size:18px;"> java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.makeAccessible(Ljava/lang/reflect/Constructor;)V at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:146) at org.spring

Maven 多模块引用版本的问题 java.lang.NoSuchMethodError

环境:Junit测试用例 java.lang.NoSuchMethodError 很明显的错误,肯定是jar版本的问题 前提 Maven 打包并没有这个的问题,估计是做了优化处理 原测试代码 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:/META-INF/spring/root_test.xml"}) @ActiveProfiles("produc

springmvc 启动报 java.lang.NoSuchMethodError: org.springframework.core.GenericTypeResolver.resolveTypeArguments(Ljava/lang/Class;Ljava/lang/Class;)[Ljava/lang/Class;

maven项目,所有的包都是按照提示,自动添加的,知道启动项目报错 才发现 spring-web 和 spring-webmvc 版本不一致 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.3.7.RELEASE</version> <scope>compile&

【报错】项目启动部署时报错:java.lang.NoSuchMethodError

报错: ===================================================================================================== 项目启动部署报错: java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.doWithLocalFields(Ljava/lang/Class;Lorg/springframework/util/Ref

项目启动部署时报错:java.lang.NoSuchMethodError

报错: ===================================================================================================== 项目启动部署报错: java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.doWithLocalFields(Ljava/lang/Class;Lorg/springframework/util/Ref

java.lang.NoSuchMethodError: org.hibernate.Session

最近整合spring4和hibernate4,beans.xml如下 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:conte

java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(Z)V

参考链接:https://blog.csdn.net/baicp3/article/details/13512237 参考链接https://blog.csdn.net/sinat_32034679/article/details/76572613?utm_source=blogxgwz5 除了以上链接中可能会出现的问题外,我这边是因为使用了多创建了相同名称的实体类,导致跳转url的时候报java.lang.NoSuchMethodError: org.objectweb.asm.ClassWr

记一次部署时报java.lang.NoSuchMethodError:javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax / persistence / ValidationMode;的解决办法

楼主在部署war包的时候,本地启动不报错,服务器商报如下问题: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested excepti