maven中如何解决jar包的依赖冲突Caused by:java.lang.NoSuchMethodError Caused by: java.lang.ClassNotFoundException

产生jar包依赖冲突的原因:

假如在一个项目中,如项目demo中,我们即引入了aaa.jar又引入了bbb.jar,但是这两个jar包同时又引入了传递依赖xxx.jar,不同的是aaa.jar和bbb.jar这两个依赖中的xxx.jar的版本不同,这样就有可能产生依赖冲突,当我们的代码要使用xxx.jar中的方法时,就有可能产生依赖冲突:比如xxx.jar1.0版本中没有a方法,而xxx.jar2.0版本中有a方法,这样当在执行代码的时候,有可能只有一个类加载到jvm中(有可能是xxx1.0版本也有可能是xxx2.0版本),所有就会产生依赖冲突,那么怎么解决依赖冲突呢?

报错代码:

Caused by:java.lang.NoSuchMethodError

Caused by: java.lang.ClassNotFoundException

1. Maven默认处理策略:

  • 最先声明优先

就是在pom文件中谁的dependency在前谁的class就优先被加载,一般情况下我们是将产生依赖冲突的两个jar包中低版本的dependency坐标放在前面

2. 使用exclusion标签来排除”传递依赖“

什么情况下要排除传递依赖(当项目中有多个依赖jar,都共同依赖了另一个jar,而且依赖版本不一致,有可能产生依赖冲突,此时可以手动排除掉一些传递依赖来解决冲突)

如下所示在产生依赖冲突的坐标中加入exclusion标签,并将冲突的坐标加入,就可以实现手动排除依赖

             <dependency>
                <groupId>org.apache.spark</groupId>
                <artifactId>spark-hive_2.11</artifactId>
                <version>${spark.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.hadoop</groupId>
                        <artifactId>hadoop-annotations</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

3. maven知识补充

maven是一个java项目管理工具(项目结构,依赖,打包)
maven的父子工程结构(常用于大型项目开发)
-- 父工程的pom中会有所有子工程的<module>定义
-- 子工程的pom中会有父工程<parent>定义
-- 父工程的<dependencies>中引入的依赖,会被所有子工程继承
-- 父工程的<build>中引入的插件,会被所有子工程继承
-- 父工程的<dependencyManagment>中定义的依赖,会对子工程中的相应依赖jar包形成定义约束(版本,exclusion,scope,....>

4. 如何实现手动将jar安装到本地maven仓库

如果这个jar包是一个公司内部的私密jar包,或者是一个没被maven中央仓库收录的jar包,那么,我们如果需要在项目中用dependency引入的话,我们可以把它安装到自己的maven本地库,或者公司的maven私服中

安装命令一:这条命令时默认安装到maven自带的本地仓库中
mvn install:install-file -Dfile=d:/json-serde.1.3.8.jar -DgroupId="org.openx.data" -DartifactId=json-serde -Dversion="1.3.8" -Dpackaging=jar

安装命令二:这条命令是将jar安装到指定的仓库路径下

bin\mvn install:install-file -Dfile=D:\json-serde-1.3.8.jar -DgroupId="org.openx.data" -DlocalRepositoryPath=E:\develop\java_maven\repository -DartifactId=json-serde -Dversion="1.3.8" -Dpackaging=jar

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值