沖突的地放其實很多,大概都是類似,找不到哪個方法了:
類似於:
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. 19/07/02 16:07:02 ERROR boot.SpringApplication: Application run failed java.lang.NoSuchMethodError: io.netty.util.concurrent.MultithreadEventExecutorGroup.<init>(ILjava/util/concurrent/Executor;[Ljava/lang/Object;)V at io.netty.channel.MultithreadEventLoopGroup.<init>(MultithreadEventLoopGroup.java:52) at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:87) at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:82) at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:63) at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:51) at io.netty.channel.nio.NioEventLoopGroup.<init>(NioEventLoopGroup.java:43) at com.ime.gbt32960.InfoServerApplication.run(InfoServerApplication.java:33) at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797) at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:781) at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) at com.ime.gbt32960.InfoServerApplication.main(InfoServerApplication.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:58)
其實發生這種事情,靠猜沒用的。最簡單粗暴的方式就是通過maven打印依賴樹的方式,去查看;
比如上面的錯誤,是因為netty版本不一致造成的。那么就打印依賴樹,找到所有netty。然后去掉不是你導入的版本就行了(因為應用的框架多了,內部通信啥的,很多都會選擇netty,這就導致你的版本不一定與內部框架的netty版本一致的原因);
查看maven的依賴樹方法:
mvn dependency:tree
然后搜索netty。就可以看到版本不一致是哪個框架的
如果知道了是哪個框架的,那么使用maven的排除,即可:
例如:
<dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>${hadoop.version}-${cdh.version}</version> <exclusions> <exclusion> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> </exclusion> <exclusion> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> </exclusion> <exclusion> <groupId>io.netty</groupId> <artifactId>netty</artifactId> </exclusion> <exclusion> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> </exclusion> </exclusions> </dependency>