发表于: 2018-01-13 20:07:37
0 630
今天完成的事:
看了maven的module,模块和继承
聚合
继承
明天计划的事:
小课堂
问题:
暂无
收获:
背景介绍
为什么要聚合?
随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式 进行开发,于是就有了我们的分层架构、分模块开发,来提高代码的清晰和重用。
比如:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每 个模块,但是随着项目的不断变大和复杂化,这样的管理是混乱的,没有遵守一个设计模式原则:“高内聚,低耦合”,于是我们就希望用分层架构、分层模块来提高代码的清晰和重用, 这时Maven给出了聚合的配置方式。
知识剖析
建立聚合project的时候,我们要注意以下几点:
1、该聚合本身也做为一个Maven项目,它必须有自己的POM
2、它的打包方式必须为: pom
3、引入了新的元素:modules---module
4、版本:聚合模块的版本和被聚合模块版本一致
5、习惯约定:为了方便构建,通常将聚合模块放在项目目录层的最顶层, 其它聚合模块作为子目录存在。这样当我们打开项目的时候,第一个看到的就是聚合模块的POM
6、聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/java、src/test/java等目录, 因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。
7、聚合模块和子模块的目录:他们可以是父子类,也可以是平行结构,当然如果使用平行结构,那么聚合模块的POM也需要做出相应的更改
模块化的好处:
1、方便重用。项目的一些包都是复用的,称为项目复用的基础类库,供所有的项目使用。当需要再开发一个模块的时候重用这些 复用的模块能省不少事,这是模块化最重要的一个目的。
2、灵活性。比如我们公共的jar包,我们不需要再当源码,只需要deploy到nexus,其他人从nexus下载即可。代码的可维护性、可扩展性好,并且保证了项目独立性与完整性。
常见问题
聚合/继承?
聚合:把多个模块或项目聚合到一期,我们可以建立一个专门负责聚合工作的project.
继承:父子关系,Maven继承也是为了防止重复,让项目的jar包版本一致,在项目管理上起了很大的作用。
对于聚合模块来说,它知道有哪些被聚合的模块,而对于被聚合的模块来说,它们不知道被谁聚合了,也不知道它的存在; 对于继承关系的pom来说,它不知道被哪些模块继承了,对于子pom来说,它必须知道要继承谁。
多模块和父子关系是不同的。如果core和webapp只是在逻辑上属于同一个总工程,那么我们完全可以只声明模块关系, 而不用声明父子关系。如果core和webapp分别处理两个不同的领域,但是它们又共享了很多,比如依赖等, 那么我们可以将core和webapp分别继承自同一个父pom工程,而不必属于同一个工程下的子模块。
扩展思考
模块之间的依赖:
Maven在创建webapp模块时并不知道webapp依赖于core,所以这种依赖关系需要我们手动加入, 在webapp模块的pom.xml中加入对core模块的依赖:在webapp的dependencies中加入core模块的GAV坐标,就完成了依赖。
此时再在聚合目录下执行 “mvn clean install”,Maven将根据自己的Reactor机制决定哪个模块应该 先执行,哪个模块应该后执行。比如,这里的webapp模块依赖于core模块,那么Maven会先在core模块上执行 “mvn clean install”,再在webapp模块上执行相同的命令。在webapp上执行“mvn clean install”时, 由于core模块已经被安装到了本地的Repository中,webapp便可以顺利地找到所依赖的core模块。
参考文献
https://www.cnblogs.com/davenkin/p/advanced-maven-multi-module-vs-inheritance.html
http://blog.csdn.net/yuanxiaojun1990/article/details/50359059
评论