Maven学习6 - 拆分与聚合

02.Maven高级-拆分与聚合

这里有一个例子:

订单操作,买家需要看到订单,并且卖家也可以看到订单。这两个操作都是由持久层完成的,所以,如果持久层可以复用,将大大减少工程量。这里,maven就可以帮我们做到。
该工程的实例代码:示例代码

1. Maven工程的拆分和聚合

1.1 什么是工程的拆分

maven解决代码可重用和便于维护的问题上是这样解决的:

maven把一个完整的项目,分成不同的独立模块,这些模块都有各自独立的坐标,哪一个地方需要用到其中的某块,直接引用坐标即可。

今后,如果公司开发一个新项目,我们首先考虑问题不是持久层、业务层、工具类、实体类等如何编写,而是考虑这些模块是否存在。如果存在直接引用。

1.2 什么是工程的聚合

我们可以把拆分零散的模块聚合到一起编写一个完整的项目,这就是maven聚合思想。

项目都是分模块开发的,每个模块开发完成运行整个工程需要将模块聚合在一起运行

1.3 什么是继承

继承是为了消除重复,如果将持久层、业务层、视图层分开创建独立的工程则每个工程的pom文件中的内容存在重复,比如:设置编译版本,锁定版本等。可以将这些重复的配置提取出来在父工程的pom.xml中定义。

2. 如何进行工程的拆分

2.1 工程和模块的区别:

工程不等于完整的项目,模块也不等于完整的项目,一个完整的项目看的是代码,代码完整,就可以说这是一个完整的项目,和此项目是工程还是模块没有关系。

工程天生只能使用自己内部资源,工程天生是独立。后天可以和其他工程或者模块建立关联关系。

模块天生不是独立的,模块天生是属于父工程的。模块一旦创建,所有父工程的资源都可以使用。

2.2 父工程和子模块,模块和模块之间的关系

父子工程之间,子模块天生继承父工程,可以使用父工程的所有资源。

子模块之间天生是没有任何关系的。

父子工程之间不用建立关系,继承关系是先天的,不需要手动加建立。

平级之间的引用叫依赖,依赖不是先天的。一来是需要后天建立的。

2.3 如何进行工程的拆分

1. 进行工程的拆分

  1. 首先创建一个工程,因为该工程是父工程,所以这个工程之间创建成一个普通的java Maven工程即可。

  2. 然后,右击父工程,选择module。

    Maven学习6 - 拆分与聚合

  3. 然后根据子模块的性质,选择合适的模块即可。如果是web类型的,那么就创建一个webapp类型的模块;如果是普通的java模块,就不使用框架即可。

  4. 建立完成之后,结构图如下:

    Maven学习6 - 拆分与聚合

    这里面的每一个子模块都有一个pom文件,如果想要之间相互引用,需要在pom文件中进行配置:

    Maven学习6 - 拆分与聚合

    而子模块天生继承了父工程的所有依赖,所以可以直接使用父工程中的东西。

  5. 如果需要使用其他工程的资源。需要将其他的工程打成jar包,放入本地仓库,再在pom文件中进行引用。

3. 关于web项目的启动

如果是web项目,那么一共有三种启动方式。

第一种:通过配置maven中内置的tomcat7插件,来启动webapp,这时,要选择父工程的tomcat7插件启动。

第二种:通过配置maven中内置的tomcat7插件,来启动webapp,这时,选择web模块启动,此时需注意,web项目的打包方式必须是war。这里需要注意的是,如果该web模块依赖于其他的模块,必须将其他模块打包安装在本地仓库,才能正常的运行web模块。

第三种:配置本地的tomcat服务器,加入web模块的artifact即可。