了解maven的module。

大家好,我是IT修真院成都分院第8期的JAVA学员,一枚正直纯洁善良的java程序员。 今天给大家分享一下,修真院官网Java任务2,深度思考中的知识点————了解maven的module。

1.背景介绍

为什么要聚合?

随着技术的飞速发展和各类用户对软件的要求越来越高,软件本身也变得越来越复杂,然后软件设计人员开始采用各种方式

                进行开发,于是就有了我们的分层架构、分模块开发,来提高代码的清晰和重用。

比如:我们在开发过程中,创建了2个以上的模块,每个模块都是一个独立的maven project,在开始的时候我们可以独立的编译和测试运行每

                个模块,但是随着项目的不断变大和复杂化,这样的管理是混乱的,没有遵守一个设计模式原则:“高内聚,低耦合”,于是我们就希望用分层架构、分层模块来提高代码的清晰和重用,

                这时Maven给出了聚合的配置方式。

2.知识剖析

建立聚合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下载即可。代码的可维护性、可扩展性好,并且保证了项目独立性与完整性。

3.常见问题

聚合/继承?

聚合:把多个模块或项目聚合到一期,我们可以建立一个专门负责聚合工作的project.

继承:父子关系,Maven继承也是为了防止重复,让项目的jar包版本一致,在项目管理上起了很大的作用。

对于聚合模块来说,它知道有哪些被聚合的模块,而对于被聚合的模块来说,它们不知道被谁聚合了,也不知道它的存在;

                对于继承关系的pom来说,它不知道被哪些模块继承了,对于子pom来说,它必须知道要继承谁。

多模块和父子关系是不同的。如果core和webapp只是在逻辑上属于同一个总工程,那么我们完全可以只声明模块关系,

                而不用声明父子关系。如果core和webapp分别处理两个不同的领域,但是它们又共享了很多,比如依赖等,

                那么我们可以将core和webapp分别继承自同一个父pom工程,而不必属于同一个工程下的子模块。

5.编码实战

6.扩展思考

模块之间的依赖:

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模块。

7.参考文献

https://www.cnblogs.com/davenkin/p/advanced-maven-multi-module-vs-inheritance.html

http://blog.csdn.net/yuanxiaojun1990/article/details/50359059

PPT :ppt

腾讯视频:

undefined_腾讯视频

问题:

什么情况下使用继承?

需要防止依赖重复,让项目的jar包版本一致的时候。

子类直接可以互相继承吗?

不行,两个之间只能一个父一个子。

那我统一把子模块的依赖都放到父模块的依赖可以吗‘?

可以的,只是如果不是共用的话会显得比较臃肿。

core包还是要打包给web和service添加吧?

如果都是依赖于core包的话,是要先打包core的,但是如果直接在聚合项目执行命令,maven会

自动决定先后打包顺序的

感谢大家观看!

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

我的邀请码:17701057,或者你可以直接点击此链接:http://www.jnshu.com/login/1/17701057

    原文作者:Pwr
    原文地址: https://www.jianshu.com/p/1440482a729c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞