目录
1.背景
2.查找原因
1.查看使用类
2.查看pom文件
3.解决
1.exclusion
2.dependency
1.背景
在项目中引入apollo的时候报错提示
2.查找原因java.lang.NoSuchMethodError: com.google.common.base.Splitter.splitToList(Ljava/lang/CharSequence;)Ljava/util/List;
at com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer.initialize(ApolloApplicationContextInitializer.java:100)
at com.ctrip.framework.apollo.spring.boot.ApolloApplicationContextInitializer.initialize(ApolloApplicationContextInitializer.java:82)
at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:635)
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:349)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:313)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1186)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1175)
根据上述提升,我们可以知道是告诉我们没有com.google.common.base.Splitter.splitToList这个方法,
1.查看使用类那我们根据提示进入使用这个方法ApolloApplicationContextInitializer的地方去看看一下。
搜索一下发现下面这里用到了
2.查看pom文件protected void initialize(ConfigurableEnvironment environment) { if (!environment.getPropertySources().contains("ApolloBootstrapPropertySources")) { String namespaces = environment.getProperty("apollo.bootstrap.namespaces", "application"); logger.debug("Apollo bootstrap namespaces: {}", namespaces); ListnamespaceList = NAMESPACE_SPLITTER.splitToList(namespaces); CompositePropertySource composite = new CompositePropertySource("ApolloBootstrapPropertySources"); Iterator i$ = namespaceList.iterator(); while(i$.hasNext()) { String namespace = (String)i$.next(); Config config = ConfigService.getConfig(namespace); composite.addPropertySource(this.configPropertySourceFactory.getConfigPropertySource(namespace, config)); } environment.getPropertySources().addFirst(composite); } }
我们可以根据提示知道splitToList是com.google.common.base.Splitter类里面的方法,我们点击splitToList发现进不去这个方法,那说明这个类里面没有了这个方法,我们再次搜索这个类com.google.common.base.Splitter,查看这个类里面的方法,发现确实没有splitToList这个方法。
猜测可能是jar包冲突,我们打开pom文件
可以看到确实是jar包冲突了,我们要使用的是19.0版本的,但是使用的是11.0.2版本的jar包,然后11.0.2版本的jar包没有splitToList这个方法,导致问题的出现。
3.解决 1.exclusion使用exclusion解除掉有冲突的jar包依赖,exclusion表示排除掉jar包下使用某jar包的依赖,
因为这里冲突的jar包很多,所以这里没使用这种方法
下面是写的一个demo
org.apache.hadoop
hadoop-hdfs
2.7.7
org.slf4j
slf4j-log4j12
2.dependency
maven有个就近原则,所以我们在pom文件里面引入jar包就行了
com.google.guava
guava
19.0
或使用dependencyManagement
com.google.guava
guava
19.0
刷新maven
发现jar包版本已更新,问题解决
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)