目录
- 本篇博客的内容是涉及Maven的高级特性。
- Maven的高级特性(模块化、聚合、依赖管理)。本篇博客的主要内容是偏向于Maven项目(工程)模块化与Maven项目(工程)间的继承机制和聚合。
一、Maven项目模块化?
(1)基本介绍。
- Maven项目模块化是指将一个大型项目拆分成多个模块(Module)。
- 每个模块负责一部分功能。这样可以提高项目的可维护性、可扩展性和可重用性。
(2)汽车模块化生产再聚合组装。
- 在现实生活中,汽车厂家进行汽车生产时,由于整个生产过程非常复杂和繁琐,工作量非常大。
- 所以车场都会将整个汽车的部件分开生产,最终再将生产好的部件进行组装,形成一台完整的汽车。大致过程如下图所示。
(3)Maven项目模块化图解。
- 下图展示了一个Maven项目的模块化结构,其中包含一个父工程和四个子模块项目。
- 这种模块化结构有助于项目的组织和管理。使得各个模块可以独立开发和测试,同时保持一致的构建和依赖管理。
1、maven_parent。
- 这是项目的父工程(项目),通常是一个聚合项目。
- 其pom.xml文件中定义了所有子模块的公共依赖、插件和构建配置。
- 父项目负责管理子模块之间的依赖关系和版本控制。
2、maven_pojo。
- 这是一个子模块,pojo(实体类层)。通常用于定义项目中的所有所需的实体类。
- 这个模块可能不包含业务逻辑。而是作为数据模型层,供其他模块使用。
- 它继承自父项目(maven_parent)。意味着它将使用父项目中定义的依赖和插件。
3、maven_dao。
- 这个子模块通常用于数据访问对象层(dao/mapper),负责与数据库数据进行交互。
- 它依赖maven_pojo模块,因为dao层需要使用pojo(实体类层)来表示数据库中的数据。
- 同样,它也继承自父项目(maven_parent)。
4、maven_service。
- 这个子模块包含业务逻辑层(service),负责处理应用程序的核心业务逻辑。
- 它依赖于maven_dao模块,因为业务逻辑层需要通过DAO层与数据库交互。
- 它也继承自父项目(maven_parent)。
5、maven_web。
- 这个子模块通常用于Web层。包含Web应用程序的前端和后端控制器。
- 它依赖于maven_service模块,因为Web层需要调用业务逻辑层来处理请求。
- 它同样继承自父项目(maven_parent)。
6、所有的依赖关系与继承关系。
- maven_pojo模块被maven_dao和maven_service模块依赖,因为它提供数据实体模型。
- maven_dao模块被maven_service模块依赖,因为它提供了数据访问的功能。
- maven_service模块被maven_web模块依赖,因为它提供了业务逻辑处理的功能。
- 所有子模块都继承自maven_parent。这表示它们共享父项目的配置(如:版本号、依赖管理、插件等等)。
二、Maven项目的继承。
(1)Java语言的继承关系。
- 在Java语言中,类之间是可以继承的。
- 通过继承,子类就可以直接引用父类中非private的属性和方法。也可以拥有自己的属性与方法。
(2)Maven工程(项目)间的继承。
- 同样,在Maven项目中,继承是一种机制。允许子模块(子项目)继承父模块(父项目)的配置。就可以使用在父工程(项目)中引入的依赖。
- 这种机制在多模块项目中非常有用。因为它可以减少重复配置,确保所有模块共享相同的构建配置和依赖管理。
(3)Maven工程(项目)间如何使用"继承"机制。
1、操作位置。
- 主要是在核心配置文件pom.xml文件中进行操作。
2、使用的核心标签。
- <parent>。(表示:指定本子项目的父项目)
- <packing>。(表示:指定打包方式:pom。表示本Maven工程是父工程)
- <modules>。(表示:父工程(项目)与其他子工程(项目)间的聚合)
3、核心注意事项。
- 父工程(项目)与子工程(项目)。
- 依赖管理。
(4)IDEA中简单演示Maven项目间继承关系。
- 首先先创建一个父项目(工程)。
- 再创建几个子项目。注意是在该父项目(工程)的目录下进行新建!
- 这里举例创建dao(数据访问层)、service(服务层)、pojo(实体层)、webServlet(请求响应层)的各个子项目。
- dao子项目的创建。
- service子项目的创建。
- pojo子项目的创建。
- webServlet子项目的创建。
- 删除父工程(项目)的无用目录。
- 操作完后。当前父项目(工程)的pom.xml文件。
- 被继承的Maven工程通常称为父工程,父工程的打包方式必须为pom。所以我们区分基个Maven工程是否为父工程就看这个工程的打包方式是否为pom!
- 每一个子项目的pom.xml文件。
- 继承其他Maven父工程(项目)的工程通常称为子工程(项目)。在pom.xml文件中通过<parent>标签进行父工程(项目)的继承。
三、Maven项目的聚合。
(1)什么是Maven项目的聚合?
- 在Maven中,聚合是一个项目,它允许你执行构建生命周期阶段,如编译、测试或打包,跨越多个模块。
- 聚合项目通常用于管理多模块项目。其中每个模块可以独立构建,但整个项目作为一个整体进行部署和发布。
- 在Maven工程的pom.xml文件中可以使用<modules>标签将其他maven工程聚合到一起。聚合的目的是为了进行统一操作。
(2)为啥需要Maven项目的聚合?
拆分后的maven工程有多个,如果要进行打包,就需要针对每个工程分别执行打包命令,操作起来非常繁琐。这时就可以使用<modules>标签将这些工程统一聚合到一起。
maven工程中,需要打包的时候,只需要在此工程中执行一次打包命令,其下被聚合的工程就都会被打包了。
(3)使用Maven的项目(工程)间的聚合。
- 直接使用上面继承的例子。
- 父工程(项目)ParentWeb。其子项目:pojo项目、dao项目、service项目、webServlet项目。
- 如下是父项目的pom.xml文件。核心使用标签<packaging>(打包)、<modules>(聚合)。
- dao子项目依赖pojo子项目、service子项目依赖dao子项目、webServlet子项目依赖service子项目。
- 如下是各子项目的pom.xml文件。核心使用标签<parent>(父工程)、<modules>(子模块间的聚合或依赖)。