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<String> 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

	<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-hdfs</artifactId>
			<version>2.7.7</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-log4j12</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

2.dependency

maven有个就近原则,所以我们在pom文件里面引入jar包就行了

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>19.0</version>
        </dependency>

或使用dependencyManagement

    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>com.google.guava</groupId>
    				<artifactId>guava</artifactId>
    				<version>19.0</version>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>

刷新maven

发现jar包版本已更新,问题解决 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值