产生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

 

 

 

 


版权声明:本文为Fresh_man888原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/Fresh_man888/article/details/111145208