lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1846 随笔 :: 0 文章 :: 109 评论 :: 288万 阅读

 

在实际的项目开发中,为了更好的组织项目代码,会采用分层架构的方式,这就会使用到maven的多模块特性。
假设项目分为A、B、C、D四层,在父模块的pom.xml中,一般这样来对子模块进行聚合

<modules>
    <module>A</module>
    <module>B</module>
    <module>C</module>
    <module>D</module>
</modules>

 

 

假设各个子模块间,配置的相互依赖关系如下:

A 依赖 B
B 依赖 C
D 依赖 A

 

 

构建父模块,我们能够看到以下输出:

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] C
[INFO] B
[INFO] A
[INFO] D
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------

 

 

这是因为子模块的构建顺序受两个因素影响:

1、父模块中各子模块的声明次序
2、子模块间的依赖关系

实际的构建顺序是这样形成的:
maven按照次序读取pom,如果该pom没有依赖其他子模块,就构建该模块,否则就构建其依赖的模块,如果该依赖模块还依赖于其他的模块,那么就进一步构建依赖的依赖。

在示例中,A模块依赖B,而B模块又依赖C,因此要先构建C,再构建B,然后才能构建A。而D依赖的模块A已经构建了,因此直接构建它。

模块间的依赖关系会将反应堆(Reactor)构成一个有向非循环图,各个模块是该图的节点,依赖关系构成了有向边。这个图不允许出现循环。如果A依赖B,B又依赖A,这样就产生了循环依赖,Maven会报错。

posted on   白露~  阅读(1535)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示