maven jar包版本问题总结

 

                                       maven jar包版本问题总结

 

前言

         相信很多朋友二次开发或平时都会遇到jar包版本问题,同一个项目中同时依赖了高低版本的同一个jar包,然后报各种奇葩问题。

 

一  Maven项目父子模块JAR包继承与不继承处理简单处理

 

   在父级项目中将部分子模块中不需要继承的jar包放入中,在需要引入的子模块中增依赖继承如下:

 父项目:

maven jar包版本问题总结

子模块中使用:

maven jar包版本问题总结   

不需要继承的子模块不用做任何处理

也可以在子模块中直接排除JAR包依赖

maven jar包版本问题总结

 

二 maven依赖复杂处理(Maven 依赖范围、依赖传递、排除依赖)

    Scope 作用范围 

     1. compile 默认的范围,编译测试运行都有效。
     2. provided 编译和测试时有效,最后是在运行的时候不会被加入。官方举了一个例子。比如在JavaEE web项目中我们需要使 

    用servlet的API,但是呢Tomcat中已经提供这个jar,我们在编译和测试的时候需要使用这个api,但是部署到tomcat的时候,如      果还加入servlet构建就会产生冲突,这个时候就可以使用provided。
    3. runtime 在测试和运行时有效。
   4. test 在测试时有效。
   5. system 与本机系统相关联,可移植性差。编译和测试时有效。
   6. import 导入,它只在使用dependencyManagement中,表示从其他pom中导入dependecy的配置。

maven jar包版本问题总结

import 就是把A中的构建导入到B中

 

依赖传递

先建立第一个项目project01
建立第二个项目project02
建立第二个项目project03

我们把project01打包安装到本地仓库中。
clean install
在project02中依赖project01

maven jar包版本问题总结

把project02 打包安装在本地仓库
在project03中依赖project02

maven jar包版本问题总结

然后编译项目project03 会发现project01也会在project03中

maven jar包版本问题总结

 

这就是传递依赖

排除依赖

上面演示了传递依赖,但是如果我们只需要依赖project02 并不想依赖进来project01怎么办呢?这个时候就要是用exclusions 排除依赖列表

project03排除依赖project01pom.xml配置如下

maven jar包版本问题总结

这样在project03中就不会依赖进来project01

maven jar包版本问题总结