对于一个大型的项目,如果我们直接作为一个工程开发,由于相互之间的依赖我们只能从头到尾由一组人开发,否则就会出现一个类好多人开发,相互更改的混乱局面,这个时候我们就将项目进行了横向和纵向的拆分。
所谓的横向的拆分就是我们平常说的三层架构,将项目分成了web层,service层、dao层(web层也被叫做表现层,service层也被叫做业务层,dao层也被持久层),可以理解为将一个功能模块的不同调用过程进行了水平方向的拆分。
所谓的纵向拆分就是将一个项目的多个功能模块进行了聚合,可以理解为为了完成一个系统。
横向拆分后,每个功能模块进行了单独的开发之后,项目整合的时候就需要有一个能够整合这些项目或者模块的工程,这就是所谓聚合工程的意义。
建立聚合工程需要注意:
1.该聚合项目本身也做为一个Maven项目,它必须有自己的POM
2.它的打包方式必须为: pom
3.引入了新的元素:modules---module
4.版本:聚合模块的版本和被聚合模块版本一致
5.relative path:每个module的值都是一个当前POM的相对目录
6.目录名称:为了方便的快速定位内容,模块所处的目录应当与其artifactId一致(Maven约定而不是硬性要求),总之,模块所处的目录必须和
7.聚合模块减少的内容:聚合模块的内容仅仅是一个pom.xml文件,它不包含src/main/Java、src/test/java等目录,因为它只是用来帮助其它模块构建的工具,本身并没有实质的内容。
8.聚合模块和子模块的目录:他们可以是父子类,也可以是平行结构,当然如果使用平行结构,那么聚合模块的POM也需要做出相应的更改。
9 如果聚合项目的子模块新建完成后进行了删除操作,一定要在聚合项目中pom.xml中的modules选项卡中将这个子模块进行删除
继承除了能够避免重复,还有一个好处就是让项目更加安全
继承时需要注意;
1.说到继承肯定是一个父子结构,那么我们在聚合项目中来创建一个parent project
2.
3.结构:父模块只是为了帮助我们消除重复,所以它也不需要src/main/java、src/test/java等目录
4.新的元素:
5.
6.relativePath的默认值: ../pom.xml
7.子模块省略groupId和version: 使用了继承的子模块中可以不声明groupId和version, 子模块将隐式的继承父模块的这两个元素
对于聚合模块来说,它知道有哪些被聚合的模块,而对于被聚合的模块来说,它们不知道被谁聚合了,也不知道它的存在
对于继承关系的父POM来说,它不知道自己被哪些子模块继承了,对于子POM来说,它必须知道自己的父POM是谁
在一些最佳实践中我们会发现:一个POM既是聚合POM,又是父POM,这么做主要是为了方便。
接下来咱们就直接开始创建maven项目来实现聚合和继承;
首先先实现继承,右键new->project..->选择
点击->Next下一步;
填写完成之后点击->Finish完成,打开项目我们可以看到里面有一个pom.xml文件
pom.xml文件我这里没有做任何添加jar包操作,因为添加jar包需要下载,耗费时间,我就不做操作了,那么到此父类创建完成,接下来我们创建子类项目;
同样创建操作,和创建父类一样,但是到这里要注意:
这里编辑好了后,选择Finish完成;那么我们会看到刚刚创建的maven项目里的pom文件会有这一部分
web-parent
com.company
0.0.1-SNAPSHOT
com.company
web-common
0.0.1-SNAPSHOT
好,这样我们就继承了web-parent项目,但是注意,我没有更改任何pom文件,这里大家想要添加jar依赖什么的,可以自己自行添加,我只是演示一下继承项目的具体操作!
接下来我们继续演示聚合项目操作!
同样新建一个maven项目,上面有创建步骤!
然后点击->Finish完成;
然后在此项目上右击选择->new->project..->选择
选择maven Module 项目然后Next,创建一个web-test-pojo
然后Next下一步;
点击Finish完成;接下来同样的步骤创建几个maven项目web-test-service,web-test-pojo;
建立以war为基础的Maven项目,我们之前已经建立了三个以web-test为parent的Maven的jar的模块,但是要发布一个web项目,必须是有war包,war中才含有文件夹来存放前端的js,jsp等文件。和上面一样,在web-test上面创建module,不同的是,创建的packaging是war
这个时候,我们会发现web-test中的pom文件多了下面的内容;
web-test-pojo
web-test-mapper
web-test-service
web-test-web
org.apache.tomcat.maven
tomcat7-maven-plugin
8080
/
另外在,web-parent和web-common安装到本地的仓库中去
然后Run,web-common同理;
执行后,在web-test这个主项目中run下面的代码 clean tomcat7:run
那么好,maven的聚合和继承简单的操作到此结束。