Spring Boot 多模块项目2025年1月17日 | 阅读 11 分钟 多模块项目包含嵌套 Maven 项目的 Spring Boot 项目称为多模块项目。在多模块项目中,父项目充当基础 Maven 配置的容器。 换句话说,多模块项目由一个父 POM 构建,该父 POM 管理一组子模块。或者,多模块项目由引用一个或多个子模块的父 POM 定义。 父 Maven 项目必须包含打包类型pom,这会将项目标识为聚合器。父项目的pom.xml 文件包含所有模块、公共依赖项和由子项目继承的属性列表。父 POM 位于项目的根目录。子模块是实际的 Spring Boot 项目,它们继承了父项目的 Maven 属性。 当我们运行多模块项目时,所有模块将一起部署在嵌入式 Tomcat 服务器中。我们也可以单独部署某个模块。 父 POM父 POM 定义Group ID、Artifact ID、version和packaging。在之前的 Maven 项目中,我们已经看到父 POM 定义的打包类型是jar。但在多模块项目中,父POM定义打包类型为pom。打包类型为 pom 的项目引用其他 Maven 项目。 为什么我们需要多模块项目将项目拆分成多个模块有助于轻松维护。我们还可以轻松地编辑或删除项目中的模块,而不会影响其他模块。当我们需要单独部署模块时,这非常有用。 我们只需要在父 POM 中指定所有依赖项。所有其他模块共享相同的 POM,因此我们不需要在每个模块中单独指定相同的依赖项。这使得在一个大项目中更容易保持代码井井有条。 子模块-ear, war, 和 jar子模块可以是任何项目,并且可以具有任何打包类型。我们可以自由地创建模块之间的任何类型的依赖关系并将它们捆绑在一起。 例如,我们创建一个EAR(企业归档)、WAR(Web 归档)和JAR(Java 归档)文件。JAR 文件被打包到 WAR 文件中,WAR 文件又被打包到 EAR 文件中。EAR 文件是最终准备好部署到应用程序服务器的包。 EAR 文件包含一个或多个 WAR 文件。每个 WAR 文件包含所有 WAR 文件通用的服务项目,其打包类型为 JAR。 ![]() Maven 子项目/模块
多模块项目目录结构让我们来理解一下多模块项目的目录结构。 在下面的图像中,我们创建了一个名为spring-boot-multi-module-project的项目。它在目录底部包含父pom。之后,我们分别创建了两个Maven 模块,名为module1和module2。这两个模块包含它们自己的 pom 文件。 ![]() 让我们打开父 POM,看看当我们创建 Maven 模块时,它配置了什么。 pom.xml 上面的 pom 文件与我们在前面示例中看到的相同。但在pom文件中,有两点值得注意:packaging和modules。 当我们创建多模块项目时,我们需要在父 pom 文件中配置打包类型为 pom,而不是jar。 当我们创建项目中的 Maven 模块时,Spring Boot 会自动在module标签内的父 POM 中配置模块,如下所示: 现在,我们将看看module1的 pom 文件里面有什么。 pom.xml 这里需要注意的一点是,上面的 pom 文件不包含像starter-web, web-mvc等通用依赖项。它继承了来自父 POM的所有通用依赖项和属性。 Spring Boot 多模块项目示例让我们创建一个多模块应用程序的示例。
Application Module 应用程序模块是项目的主模块。它包含应用程序类,其中定义了运行 Spring Boot 应用程序所必需的 main 方法。它还包含应用程序配置属性、Controller、视图和资源。 Application Module 依赖于 Model Module、Service Implementation Module,它们包含 Model Module、Repository Module 和 Service API 模块。 Model Module Model Module 包含项目中使用的实体和视觉对象。 Repository Module Repository 模块包含项目中使用的存储库。它依赖于 Model Module。 Service API Module Service API 模块包含所有项目服务。它还依赖于 Model Module。 Service Implementation Module Service Implementation 模块实现了服务。它依赖于 Repository Module 和 Service API Module。 POM Aggregator (Parent POM)父 POM 包含所有应用程序模块。它还包含一个或多个模块所需的所有通用依赖项和属性。依赖项是无版本定义的,因为项目已将 Spring IO Platform 定义为父项。 让我们来理解一下我们创建的多模块应用程序的结构。 步骤 1:创建一个名为spring-boot-multimodule的Maven 项目。 步骤 2:打开pom.xml(父 POM)文件,并将打包类型jar更改为pom。 pom.xml (父 POM) 上面 pom 文件中需要注意的一点是,没有配置 Maven 模块,因为我们还没有创建它们。现在我们将逐一创建上面指定的 Maven 模块。 步骤 3:创建一个名为application的Maven 模块。 步骤 4:打开应用程序模块的pom.xml文件,确保打包类型为jar。 pom.xml 步骤 5:创建main类。这是要运行的类。 SampleWebJspApplication.java 步骤 6:在smaple.multimodule.web包下创建一个名为WelocameController的 Controller 类。 WelcomeController.java 步骤 7:在src/main/resource -> templates ->welcome文件夹下创建一个名为show.html的HTML文件。 show.html 步骤 8:打开application.properties文件,配置应用程序消息并将thymeleaf缓存设置为false。 application.properties 创建完所有上述文件后,应用程序模块目录如下所示: ![]() 让我们创建第二个模块,即model。 步骤 9:创建一个名为model的Maven 模块。 步骤 10:打开 model 模块的pom.xml文件,确保打包类型为jar。 pom.xml 步骤 11:在sample.multimodule.domain.entity包下创建一个名为Account的类。 Account.java 创建完所有上述文件后,model 模块目录如下所示: ![]() 让我们创建第三个模块,即repository。 步骤 12:创建一个名为repository的Maven 模块。 步骤 13:打开应用程序模块的pom.xml文件,确保打包类型为jar。(此处原文可能有误,应为 repository 模块的 pom.xml) pom.xml 步骤 14:在sample.multimodule.repository包下创建一个名为AccountRepository的类。 AccountRepository.java 创建完所有上述文件后,repository 模块目录如下所示: ![]() 让我们创建第四个模块,即service-api。 步骤 15:创建一个名为service-api的Maven 模块。 步骤 16:打开service-api应用程序的pom.xml文件,确保打包类型为jar。 pom.xml 步骤 17:创建一个名为sample.multimodule.service.api的包。 步骤 18:创建一个名为AccountNotFoundException的类。如果找不到账户,它会处理异常。 AccountNotFoundException.java 步骤 19:创建一个名为AccountService的类。它提供与账户相关的服务,例如查找和创建账户。 AccountService.java 创建完所有上述文件后,service-api 模块目录如下所示: ![]() 步骤 20:创建一个名为service-impl的Maven 模块。 步骤 21:打开service-impl应用程序的pom.xml文件,确保打包类型为 jar。 pom.xml 步骤 22:在sample.multimodule.service.impl包下创建一个名为AccountServiceImpl的类。 AccountServiceImpl.java 创建完所有上述文件后,service-impl模块目录如下所示: ![]() 现在打开父 POM文件,我们会看到我们创建的所有 Maven 模块都配置在父 POM 的 ![]() 现在确保所有五个模块都已创建,如下所示: ![]() 创建完所有模块后,主项目目录如下所示: ![]() 步骤 23:现在以 Java 应用程序的方式运行SampleWebJspApplication.java文件。 步骤 24:在浏览器中打开并调用 URL https://:8080。它将返回Message和账户号23。 ![]() 下一主题Spring Boot 打包 |
我们请求您订阅我们的新闻通讯以获取最新更新。