maven jar包版本问题总结
maven jar包版本问题总结
前言
相信很多朋友二次开发或平时都会遇到jar包版本问题,同一个项目中同时依赖了高低版本的同一个jar包,然后报各种奇葩问题。
一 Maven项目父子模块JAR包继承与不继承处理简单处理
在父级项目中将部分子模块中不需要继承的jar包放入中,在需要引入的子模块中增依赖继承如下:
父项目:
子模块中使用:
不需要继承的子模块不用做任何处理
也可以在子模块中直接排除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的配置。
import 就是把A中的构建导入到B中
依赖传递
先建立第一个项目project01
建立第二个项目project02
建立第二个项目project03
我们把project01打包安装到本地仓库中。
clean install
在project02中依赖project01
把project02 打包安装在本地仓库
在project03中依赖project02
然后编译项目project03 会发现project01也会在project03中
这就是传递依赖
排除依赖
上面演示了传递依赖,但是如果我们只需要依赖project02 并不想依赖进来project01怎么办呢?这个时候就要是用exclusions 排除依赖列表
project03排除依赖project01pom.xml配置如下
这样在project03中就不会依赖进来project01