栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录

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包版本已更新,问题解决 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866136.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号