GRPC-Server报错com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Ob...

问题背景

在做GRPC服务端的时候,不能启动,报错打印如下,但是并不能很好的看出是什么出错了,由于我单独测试的时候GRPC是可以使用的,但随着项目越来越复杂,引入的POM依赖越来越多,所以我开始从这之中查找原因

2022-01-25 11:01:39.896 ERROR [id-mapping-AsyncThread-1] o.s.a.i.SimpleAsyncUncaughtExceptionHandler.handleUncaughtException(SimpleAsyncUncaughtExceptionHandler.java:39): Unexpected exception occurred invoking async method: public void grpc.server.GrpcServer.start() throws java.io.IOException
java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;)V
    at io.grpc.Metadata$Key.validateName(Metadata.java:629)
    at io.grpc.Metadata$Key.(Metadata.java:637)
    at io.grpc.Metadata$Key.(Metadata.java:567)
    at io.grpc.Metadata$AsciiKey.(Metadata.java:742)
    at io.grpc.Metadata$AsciiKey.(Metadata.java:737)
    at io.grpc.Metadata$Key.of(Metadata.java:593)
    at io.grpc.Metadata$Key.of(Metadata.java:589)
    at io.grpc.internal.GrpcUtil.(GrpcUtil.java:86)
    at io.grpc.internal.AbstractServerImplBuilder.(AbstractServerImplBuilder.java:60)
    at io.grpc.netty.shaded.io.grpc.netty.NettyServerProvider.builderForPort(NettyServerProvider.java:39)
    at io.grpc.netty.shaded.io.grpc.netty.NettyServerProvider.builderForPort(NettyServerProvider.java:24)
    at io.grpc.ServerBuilder.forPort(ServerBuilder.java:41)
    at server.Server.start(GrpcServer.java:30)
    at grpc.server.GrpcServer$$FastClassBySpringCGLIB$$be87d0e.invoke()
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:749)
    at org.springframework.aop.interceptor.AsyncExecutionInterceptor.lambda$invoke$0(AsyncExecutionInterceptor.java:115)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

解决方案

1 通过去分析引入的jar包依赖,使用File→Setting安装Maven Dependency Helper依赖管理



2 安装之后,打开pom文件,点击Dependency Analyzer



3 选择Conflicts,点击Refresh UI进行刷新,可以看到出现了guava:18.0版本的,代表有和这个依赖有冲突了,就是重复引入了,
但引入一个问题,是排除哪一个重复的guava呢,这个问题也一直困扰着我,我的做法是先把显示的依赖排除,再继续编译尝试,不行的话,找到其他版本的guava进行排除

4 由于右键Conflicts中的guava没有出现排除选项,所以选择Jump to Left Tree显示更清楚



5 排除18版本,Reimport重新导入

6 点击Conflicts,发现没有冲突了

7 届时,也解决了GRPC服务端不能启动问题

总结

  • 依赖兼容是一个大问题,同样的jar包,但是版本号不同,里面的一些类和注解也有变化,导致不兼容
  • 使用Maven Dependency依赖插件去尝试排除冲突的包,可能会解决莫名其妙的问题




作为程序员第 34 篇文章,每次写一句歌词记录一下,看看人生有几首歌的时间,wahahaha ...

Lyric: 我好想再咬一口,ผมรักคุณ,ผมรักคุณ,ผมรักคุณ......

这是第1首歌,已经完结了,你们猜出歌名了吗?

  • 歌名:麦芽糖
  • 歌手:周杰伦
  • 专辑:十一月的肖邦

你可能感兴趣的:(GRPC-Server报错com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Ob...)