pom.xml文件jar包冲突查找及解决

pom.xml文件jar包冲突查找及解决,第1张

目录

1.背景

 2.查找原因

1.查看使用类

2.查看pom文件

3.解决

1.exclusion

2.dependency


1.背景

在项目中引入apollo的时候报错提示

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)

 2.查找原因

根据上述提升,我们可以知道是告诉我们没有com.google.common.base.Splitter.splitToList这个方法,

1.查看使用类

那我们根据提示进入使用这个方法ApolloApplicationContextInitializer的地方去看看一下。

搜索一下发现下面这里用到了

protected void initialize(ConfigurableEnvironment environment) {
    if (!environment.getPropertySources().contains("ApolloBootstrapPropertySources")) {
        String namespaces = environment.getProperty("apollo.bootstrap.namespaces", "application");
        logger.debug("Apollo bootstrap namespaces: {}", namespaces);
        List namespaceList = 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);
    }
}
2.查看pom文件

我们可以根据提示知道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包版本已更新,问题解决 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/874158.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-08

发表评论

登录后才能评论

评论列表(0条)

保存