Maven多模块项目,适用于一些比较大的项目,通过合理的模块拆分,实现代码的复用,便于维护和管理。尤其是一些开源框架,也是采用多模块的方式,提供插件集成,用户可以根据需要配置指定的模块。
先创建个简单的空的Maven Project作为父项目
重新创建一个Maven Project作为子项目
步骤1:子项目中加入 <parent>
节点,传入父项目完整坐标。
步骤2:将子项目中的依赖都注释掉。
注意:此时子项目中的没有了Maven Dependencies。
步骤3:将子项目注释的依赖添加到父项目中。
注意:此时子项目中的依赖又添加回来了。
这种直接在父工程中加入 <dependencies>
的方式,让子工程可以直接复用依赖,但是缺点是 所有的子项目无条件继承父工程所有依赖 ,所以如果要在父工程中添加依赖只能针对非常通用的依赖。
在父项目中再添加一个依赖。
子项目同时也继承了新添加的依赖。
那如果不想无条件继承父工程的所有依赖,而想让子项目自行选择需要的依赖又该如何做呢?
在父项目中用 <dependencies>
节点包裹 <dependencies>
节点,并且添加的是 完整的依赖坐标(gav) 。
此时子项目中的Maven Dependencies又会消失,说明添加 <dependencies>
节点后,它并不负责相关依赖的下载。
子项目加入相应同样依赖,注意不要加 version
( version
继承自父项目),需要什么样的依赖就声明什么。
特别注意,如果父项目提供了 groupid
和 version
,则删除子项目坐标中的 groupid
和 version
,直接继承父项目相关坐标。
dependencyManagement
的作用:依赖版本管理器
<dependencies>
(不加 dependencyManagement
,额外写一个)去做 <dependencies>
中的 <dependency>
没有声明版本号( version
),maven会去寻找有无对应的 dependencyManagement
,当前工程没有就会向上找父工程。如果找到就以 dependencyManagement
中对应依赖声明的 version
为准,否则报错version is missing。