java--遇到NoSuchMethodError通用解决思路

本文介绍了一种解决NoSuchMethodError的通用思路,通过调试定位问题根源并解决类冲突。

最近接手新项目,项目一跑,NoSuchMethodError蹦出来了,好不容易解决了,换一个电脑,NoSuchMethodError又蹦出来了,干脆,总结下遇到NoSuchMethodError应该如何应对的思路。

  通过下面的通用思路,可以在不必了解业务的情况下,尽可能解决这个报错。

  下面演示下如何在啥都不知道的情况下遇到该错误的解决思路:

  随便找一个错误示例

Caused by: java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.Compiler.<init>(Lorg/eclipse/jdt/internal/compiler/env/INameEnvironment;Lorg/eclipse/jdt/internal/compiler/IErrorHandlingPolicy;Lorg/eclipse/jdt/internal/compiler/impl/CompilerOptions;Lorg/eclipse/jdt/internal/compiler/ICompilerRequestor;Lorg/eclipse/jdt/internal/compiler/IProblemFactory;)V
    at com.taobao.sketch.compile.Compiler.generateClass(Compiler.java:392)
    at com.taobao.sketch.compile.Compiler.compile(Compiler.java:38)
    at com.taobao.sketch.compile.SketchCompilationContext.globalVmCompile(SketchCompilationContext.java:403)
    at com.taobao.sketch.runtime.SketchRuntimeServer.getGlobalVmTemplate(SketchRuntimeServer.java:622)
    at com.taobao.sketch.runtime.SketchRuntimeServer.resolveGloabalVm(SketchRuntimeServer.java:136)
    at com.taobao.sketch.runtime.SketchRuntimeServer.initializeVmLibrary(SketchRuntimeServer.java:127)
    at com.taobao.sketch.runtime.SketchRuntimeServer.init(SketchRuntimeServer.java:96)
    at com.taobao.sketch.SketchEngine.init(SketchEngine.java:66)
    at com.taobao.sketch.service.impl.SketchEngineImpl.init(SketchEngineImpl.java:118)
    at com.alibaba.citrus.springext.support.BeanSupport.afterPropertiesSet(BeanSupport.java:80)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
    ... 39 more

 

 

  这是一个spring mvc框架下的javaweb项目,在启动jetty服务器时报的错。一开始看时看到报错,内心是奔溃的,刚接手项目,以前代码又不是我写的,我怎么知道会报找不到方法的是什么原因引起的啊。别急,先看引起这个错误有可能的原因是什么。

  错误可能的原因

  1. 有这个类,该类真的没有这个方法
  2. 有这个类,而且有好几个,他们之间发生了冲突

  原因排除

  1、点击进入报错的代码所在行,在报错的地方打一个debug点,重行启动项目或重现该错误,让程序运行到该行代码:

     

    

  2、打开display界面(若没有,请在window--show view里面找出该界面),

  手动敲出xxx.class.getProtectionDomain().getCodeSource(),xxx为报错的类的全类名,鼠标选中该行代码,点击界面右上角的J图标,即会打印出到该类对应的包所在的地址。如下图所示。  

  可以看到,结果为:

  (java.security.CodeSource) (file:/D:/Program%20Files%20(x86)/eclipse/configuration/org.eclipse.osgi/843/0/.cp/lib/core-3.1.1.jar <no signer certificates>)

  3、接着复制该类的全类名,快捷键Ctrl+Shift+T打开open type界面,查看我们的项目引用到的包中,哪些有这个类:

  

  我们发现有两个包中有org.eclipse.jdt.internal.compiler.Compiler这个类,分别为:

  包一:ecj.3.5.1.jar

  包二:core-3.1.1.jar

  地址分别为:

  

  但我们发现,刚刚在display中,我们看到的地址,居然不是来自这上面两个地址(上面两个包的地址都在C盘,DEBUG中的包来自D盘),也就是说,实现运行环境引入的包,并不是在我们自己项目中配置的,因为open typy只能找到自己项目中配的东西。

  那么D盘的这个包,在什么地方引入的呢?

  想想,这个错误是在项目启动时报的,那么除了项目,还有“服务器”可能会引入其他包,那么有没有可能是服务器帮我们引入呢?

  4、打开服务器的Classpath,可以找到服务器确实引入了这个包

  

  那么我们在服务器的classpath中把这个包“remove”掉。

  5、再次重新启动项目,dubug、卡点、display,这次结果如下:

  发现:实际环境中,现在己经没有引入D盘那个core-3.1.1.jar包了。我们让项目运行下去,发现还是报同样的错——找不到方法。那么接下来我们让项目引用ecj.3.5.1.jar这个包试试。

  6、ctrl+shift+T、双击进入core-3.1.1.jar中Compiler类所在的目录结构:

   

  提示:左边栏勾上这个标志,即可展开该包所在的目录:

 

  

  

 

  同理,打开ecj.3.5.1.jar中Compiler类所在的目录结构。

  最后发现,这个jar包都同一个项目下面,而且两个包都有Compiler类,且排在前面的是core-3.1.1.jar,但是core-3.1.1.jar的Compiler类并没有我们想要的方法,所以报错。但是eclipse在找类的时候,只要按顺序找到一个,就不会往下找了,所以排在下面的ecj-3.5.1.jar并不会被找到,即使里面有Compiler这个类,且有我们想要的方法。

  7、排除core-3.1.1.jar包:

  该项目是maven项目。我们尝试直接在该项目的pom.xml中搜索core这个包是搜索不到的,那么这个core-3.1.1包可能是因为本项目引入其他项目,而其他项目引入core-3.1.1.jar,所以本项目间接把该包引过来了。

  同时,因为该项目是maven项目,可以通过以下该方法排除这个包:

  

  排除后,该项目的pom.xml变成:

  

  假如是非maven项目,那么可以直接从lib中除去该包,或从项目根目录下面打开.classpath文件,找到对应的包的配置,删除该行即可。

  通过该pom.xml我们可以知道,之所以会产生jar包冲突,原因有两个:

  1、 本项目A本身引用了ecj-3.5.1.jar包,同时引入了项目B,而项目B引入了core-3.1.1.jar,所以本项目也相当于引入了core-3.1.1.jar,这就是maven项目中常见的jar包冲突。

  2、 那为什么maven没有自动帮我们解决jar包冲突呢,那是因为ecj-3.5.1.jar包和core-3.1.1.jar包的groupId和artifactId都不一样,所以maven认为这是两个jar包,并不冲突,解决的办法就是像上面那样,加入exclusions排除。所以我们在开发一个组件的时候,起名字是一个很重要的问题,如果升级组件连名字也改了,用户会产生很大的不方便。

  再次启动项目,问题解决。

*** FATAL EXCEPTION IN SYSTEM PROCESS: main 06-27 15:50:50.222 17748 17748 E AndroidRuntime: java.lang.NoSuchMethodError: No virtual method isPlaybackDisplay()Z in class Lcom/android/server/wm/SrDisplayContent; or its super classes (declaration of 'com.android.server.wm.SrDisplayContent' appears in /system/framework/services.jar!classes3.dex) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.mediatek.server.wm.playback.SrPlaybackExtImpl.isPlaybackDisplay(SrPlaybackExtImpl.java:62) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.DisplayContent.isPlaybackDisplay(DisplayContent.java:6558) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.DisplayContent.shouldSleep(DisplayContent.java:6562) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.RootWindowContainer.hasAwakeDisplay(RootWindowContainer.java:3128) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.updateSleepIfNeededLocked(ActivityTaskManagerService.java:5109) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.TaskDisplayArea.addChildTask(TaskDisplayArea.java:336) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.TaskDisplayArea.addChild(TaskDisplayArea.java:311) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.Task$Builder.build(Task.java:6789) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.TaskDisplayArea.createRootTask(TaskDisplayArea.java:1010) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.TaskDisplayArea.createRootTask(TaskDisplayArea.java:984) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.TaskDisplayArea.getOrCreateRootHomeTask(TaskDisplayArea.java:1569) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.RootWindowContainer.setWindowManager(RootWindowContainer.java:1293) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.wm.ActivityTaskManagerService.setWindowManager(ActivityTaskManagerService.java:1077) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.am.ActivityManagerService.setWindowManager(ActivityManagerService.java:2155) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.SystemServer.startOtherServices(SystemServer.java:1655) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.SystemServer.run(SystemServer.java:947) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.server.SystemServer.main(SystemServer.java:662) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:601) 06-27 15:50:50.222 17748 17748 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:940) 06-27 15:50:52.105 17862 17862 D AndroidRuntime: >>>>>> START com.android.internal.os.ZygoteInit uid 0 <<<<<< 06-27 15:50:52.109 17863 17863 D AndroidRuntime: >>>>>> START com.android.internal.os.ZygoteInit uid 0 <<<<<< 06-27 15:50:52.114 17862 17862 I AndroidRuntime: Using default boot image 06-27 15:50:52.114 17862 17862 I AndroidRuntime: Leaving lock profiling enabled 06-27 15:50:52.118 17863 17863 I AndroidRuntime: Using default boot image 06-27 15:50:52.118 17863 17863 I AndroidRuntime: Leaving lock profiling enabled 06-27 15:50:55.185 18066 18066 D AndroidRuntime: Shutting down VM 为什么会有这种问题
06-28
2025-11-26 16:06:08 org.apache.flink.util.FlinkException: Global failure triggered by OperatorCoordinator for 'Source: KINGBASE CDC Source -> (Sink: Print to Std. Out, Filter -> Flat Map -> sys_reslib: Writer -> sys_reslib: Committer)' (operator e3dfc0d7e9ecd8a43f85f0b68ebf3b80). at org.apache.flink.runtime.operators.coordination.OperatorCoordinatorHolder$LazyInitializedCoordinatorContext.failJob(OperatorCoordinatorHolder.java:651) at org.apache.flink.runtime.operators.coordination.RecreateOnResetOperatorCoordinator$QuiesceableContext.failJob(RecreateOnResetOperatorCoordinator.java:248) at org.apache.flink.runtime.source.coordinator.SourceCoordinatorContext.failJob(SourceCoordinatorContext.java:427) at org.apache.flink.runtime.source.coordinator.SourceCoordinator.start(SourceCoordinator.java:233) at org.apache.flink.runtime.operators.coordination.RecreateOnResetOperatorCoordinator$DeferrableCoordinator.applyCall(RecreateOnResetOperatorCoordinator.java:332) at org.apache.flink.runtime.operators.coordination.RecreateOnResetOperatorCoordinator.start(RecreateOnResetOperatorCoordinator.java:72) at org.apache.flink.runtime.operators.coordination.OperatorCoordinatorHolder.start(OperatorCoordinatorHolder.java:204) at org.apache.flink.runtime.scheduler.DefaultOperatorCoordinatorHandler.startOperatorCoordinators(DefaultOperatorCoordinatorHandler.java:173) at org.apache.flink.runtime.scheduler.DefaultOperatorCoordinatorHandler.startAllOperatorCoordinators(DefaultOperatorCoordinatorHandler.java:85) at org.apache.flink.runtime.scheduler.SchedulerBase.startScheduling(SchedulerBase.java:634) at org.apache.flink.runtime.jobmaster.JobMaster.startScheduling(JobMaster.java:1091) at org.apache.flink.runtime.jobmaster.JobMaster.startJobExecution(JobMaster.java:1008) at org.apache.flink.runtime.jobmaster.JobMaster.onStart(JobMaster.java:433) at org.apache.flink.runtime.rpc.RpcEndpoint.internalCallOnStart(RpcEndpoint.java:198) at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor$StoppedState.lambda$start$0(PekkoRpcActor.java:618) at org.apache.flink.runtime.concurrent.ClassLoadingUtils.runWithContextClassLoader(ClassLoadingUtils.java:68) at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor$StoppedState.start(PekkoRpcActor.java:617) at org.apache.flink.runtime.rpc.pekko.PekkoRpcActor.handleControlMessage(PekkoRpcActor.java:190) at org.apache.pekko.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:33) at org.apache.pekko.japi.pf.UnitCaseStatement.apply(CaseStatements.scala:29) at scala.PartialFunction.applyOrElse(PartialFunction.scala:127) at scala.PartialFunction.applyOrElse$(PartialFunction.scala:126) at org.apache.pekko.japi.pf.UnitCaseStatement.applyOrElse(CaseStatements.scala:29) at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:175) at scala.PartialFunction$OrElse.applyOrElse(PartialFunction.scala:176) at org.apache.pekko.actor.Actor.aroundReceive(Actor.scala:547) at org.apache.pekko.actor.Actor.aroundReceive$(Actor.scala:545) at org.apache.pekko.actor.AbstractActor.aroundReceive(AbstractActor.scala:229) at org.apache.pekko.actor.ActorCell.receiveMessage(ActorCell.scala:590) at org.apache.pekko.actor.ActorCell.invoke(ActorCell.scala:557) at org.apache.pekko.dispatch.Mailbox.processMailbox(Mailbox.scala:272) at org.apache.pekko.dispatch.Mailbox.run(Mailbox.scala:233) at org.apache.pekko.dispatch.Mailbox.exec(Mailbox.scala:245) at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183) Caused by: java.lang.NoSuchMethodError: 'io.debezium.config.Field io.debezium.config.Field.withType(org.apache.kafka.common.config.ConfigDef$Type)' at io.debezium.relational.HistorizedRelationalDatabaseConnectorConfig.<clinit>(HistorizedRelationalDatabaseConnectorConfig.java:48) at io.debezium.relational.RelationalDatabaseConnectorConfig.lambda$new$0(RelationalDatabaseConnectorConfig.java:636) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1810) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at io.debezium.config.Configuration$5.keys(Configuration.java:1608) at io.debezium.config.Configuration$5.keys(Configuration.java:1605) at io.debezium.config.Configuration.map(Configuration.java:1567) at io.debezium.config.Configuration.subset(Configuration.java:1553) at io.debezium.relational.RelationalDatabaseConnectorConfig.<init>(RelationalDatabaseConnectorConfig.java:638) at io.debezium.connector.kes.KingbaseConnectorConfig.<init>(KingbaseConnectorConfig.java:1024) at org.apache.flink.cdc.connectors.kes.source.config.KingbaseSourceConfig.getDbzConnectorConfig(KingbaseSourceConfig.java:129) at org.apache.flink.cdc.connectors.kes.source.KingbaseDialect.openJdbcConnection(KingbaseDialect.java:75) at org.apache.flink.cdc.connectors.kes.source.KingbaseDialect.discoverDataCollections(KingbaseDialect.java:154) at org.apache.flink.cdc.connectors.kes.source.KingbaseDialect.discoverDataCollections(KingbaseDialect.java:59) at org.apache.flink.cdc.connectors.kes.source.KingbaseSourceBuilder$KingbaseIncrementalSource.createEnumerator(KingbaseSourceBuilder.java:314) at org.apache.flink.cdc.connectors.kes.source.KingbaseSourceBuilder$KingbaseIncrementalSource.createEnumerator(KingbaseSourceBuilder.java:296) at org.apache.flink.runtime.source.coordinator.SourceCoordinator.start(SourceCoordinator.java:229) ... 34 more 2025-11-26 16:06:38 org.apache.flink.util.FlinkException: Global failure triggered by OperatorCoordinator for 'Source: KINGBASE CDC Source -> (Sink: Print to Std. Out, Filter -> Flat Map -> sys_reslib: Writer -> sys_reslib: Committer)' (operator e3dfc0d7e9ecd8a43f85f0b68ebf3b80). at org.apache.flink.runtime.operators.coordination.OperatorCoordinatorHolder$LazyInitializedCoordinatorContext.failJob(OperatorCoordinatorHolder.java:651) at org.apache.flink.runtime.operators.coordination.RecreateOnResetOperatorCoordinator$QuiesceableContext.failJob(RecreateOnResetOperatorCoordinator.java:248) at org.apache.flink.runtime.source.coordinator.SourceCoordinatorContext.failJob(SourceCoordinatorContext.java:427) at org.apache.flink.runtime.source.coordinator.SourceCoordinator.start(SourceCoordinator.java:233) at org.apache.flink.runtime.operators.coordination.RecreateOnResetOperatorCoordinator$DeferrableCoordinator.resetAndStart(RecreateOnResetOperatorCoordinator.java:422) at org.apache.flink.runtime.operators.coordination.RecreateOnResetOperatorCoordinator.lambda$resetToCheckpoint$7(RecreateOnResetOperatorCoordinator.java:157) at java.base/java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:859) at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:837) at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:506) at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2079) at org.apache.flink.runtime.operators.coordination.ComponentClosingUtils.lambda$closeAsyncWithTimeout$0(ComponentClosingUtils.java:77) at java.base/java.lang.Thread.run(Thread.java:829) Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.relational.HistorizedRelationalDatabaseConnectorConfig at io.debezium.relational.RelationalDatabaseConnectorConfig.lambda$new$0(RelationalDatabaseConnectorConfig.java:636) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:176) at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:177) at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1810) at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) at io.debezium.config.Configuration$5.keys(Configuration.java:1608) at io.debezium.config.Configuration$5.keys(Configuration.java:1605) at io.debezium.config.Configuration.map(Configuration.java:1567) at io.debezium.config.Configuration.subset(Configuration.java:1553) at io.debezium.relational.RelationalDatabaseConnectorConfig.<init>(RelationalDatabaseConnectorConfig.java:638) at io.debezium.connector.kes.KingbaseConnectorConfig.<init>(KingbaseConnectorConfig.java:1024) at org.apache.flink.cdc.connectors.kes.source.config.KingbaseSourceConfig.getDbzConnectorConfig(KingbaseSourceConfig.java:129) at org.apache.flink.cdc.connectors.kes.source.KingbaseDialect.openJdbcConnection(KingbaseDialect.java:75) at org.apache.flink.cdc.connectors.kes.source.KingbaseDialect.discoverDataCollections(KingbaseDialect.java:154) at org.apache.flink.cdc.connectors.kes.source.KingbaseDialect.discoverDataCollections(KingbaseDialect.java:59) at org.apache.flink.cdc.connectors.kes.source.KingbaseSourceBuilder$KingbaseIncrementalSource.createEnumerator(KingbaseSourceBuilder.java:314) at org.apache.flink.cdc.connectors.kes.source.KingbaseSourceBuilder$KingbaseIncrementalSource.createEnumerator(KingbaseSourceBuilder.java:296) at org.apache.flink.runtime.source.coordinator.SourceCoordinator.start(SourceCoordinator.java:229) ... 8 more
最新发布
11-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值