maven工程的拆分与聚合
maven可以把一个完整的项目,拆分成各自独立的模块,并赋予这些模块独立的坐标,哪个地方要用到这些模块,直接引用坐标即可。
今后如果要开发一个项目,首先考虑的不是dao、service和controller层的代码怎么写,而是dao、service和controller这些模块是否已经存在,如果存在则直接使用。
以上即为拆分的思想,我们也可以将一些零散的模块聚合到一起组成一个完整的项目,这就是maven工程聚合的思想。
我们可以通过拆分聚合的方式来创建一个工程,相比传统maven工程的方式更加灵活。
maven父子工程
创建一个父maven工程(新建project或module都可以)。其实父工程只要有一个pom.xml文件即可。
在父工程下创建多个子模块。dao模块和service模块直接创建普通的maven工程即可,controller模块要创建web的maven工程。
工程和模块的区别
首先要明确,工程不等于项目,模块也不等于项目。一个完整的项目看的是业务代码的完整,和是不是工程或者模块没有关系。
工程默认只能使用本工程内的资源,就好比一个班不能使用另一个班的空调。但是也可以通过一些方法来让工程之间建立联系。
模块能够共享父工程的资源,好比所有的学生都能使用班里的空调。如果模块没有父工程,那就只能使用自己的资源。
子模块默认继承父工程,可以使用父工程的所有资源。但是各模块之间是没有任何联系的。如何让各模块之间产生关联呢?
在本模块中要用到哪个模块,就导入哪个模块的坐标。导入坐标之后就可以继承那个模块的所有资源。
分模块创建工程需知
父工程配置文件中有关于各模块的整合,每创建一个新模块就会自动添加
<groupId>cao.zhanpeng</groupId>
<artifactId>maven_parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>maven_dao</module>
<module>maven_service</module>
<module>maven_controller</module>
</modules>
各模块中默认都有父工程资源的继承,模块自身的坐标和父类共用组织名以及版本号
<parent>
<artifactId>maven_parent</artifactId>
<groupId>cao.zhanpeng</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>maven_controller</artifactId>
各模块之间是没有关系的,一个模块如果想要继承另一个模块的资源,只能导入另一个模块的坐标
<dependencies>
<dependency>
<groupId>cao.zhanpeng</groupId>
<artifactId>maven_dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
如果是运行整个父工程,各模块就相当于是一个整体。如果是单独运行一个模块,必须保证本地仓库中有对应的jar包。
一旦建立了各模块之间的继承,加上来自父工程的继承,整个工程就是一个整体,即聚合。
对于整个工程而言,每一层的包都是共享的。最好要保证各模块的包结构是一致的。打包后存到本地仓库时是这样的:
通常maven项目的位置,就在idea的工作空间里项目工程下的target目录中