在使用Maven包管理进行工程开发的时候,经常会遇到jar包版本难统一,有冲突难排查的情况。
尤其是子模块比较多的时候,模块间的jar包版本统一问题显得尤其重要。
所以在这里推荐一种个人认为最佳实践的方法。
如上图,这个项目有一个子模块,需要两个pom文件,一个父pom,一个子pom。
父pom的主要功能:1 定义项目的一些基本属性; 2 整个项目所引用的jar包的版本管理。
子pom的主要功能:1 定义自己所依赖的模块;2 定义自己模块儿下面需要使用的jar包
看下面的父pom配置:
4.0.0
com.wlh
wlh-root
pom
1.0-SNAPSHOT
mvn-tbbpm
junit
junit
******
com.alibaba
fastjson
junit
junit
4.11
test
org.slf4j
slf4j-api
1.7.12
*****
com.alibaba
fastjson
1.2.8
使用dependencies标签定义整个项目中都需要用到的jar包(junit和fastjson)
使用dependencyManagement标签管理整个项目中jar包的版本,这里不仅定义了junit, fastjson的版本,还定义了slf4j-api的版本。
经过了上面的配置以后,子pom就不需要关心所依赖的版本,那些通用的依赖也不需要再单独配置,简单明了。
wlh-root
com.wlh
1.0-SNAPSHOT
4.0.0
mvn-tbbpm
org.slf4j
slf4j-api
子pom只需要关心自己模块儿需要依赖的jar包就可以,版本管理可以交由父pom来控制。
这么做第一能够是配置高度统一,出了问题也好定位。
第二能够使版本管理变得简单有序。
第三,最重要的就是方便排包,如果出现包冲突,通过这个方法能够更好的定位并解决冲突。
具体排包可以参考另一篇博客:Maven解决包冲突 https://my.oschina.net/u/3755458/blog/1649938