在本文中,我们将看到**如何使用 *Spring Boot 创建多模块项目。***我们将在这个多模块应用程序中创建 2 个项目,其中一个父项目作为容器。
在我们进入更多细节之前,让我们回答一个简单的问题“Spring Boot 中多模块项目有什么好处呢?”。以下是使用 Spring Boot 的多模块项目的一些好处:
开始我们的spring boot多模块项目,第一步是创建一个简单的父项目。该父模块包含一个 pom.xml
文件,我们的 pom.xml
将包含以下详细信息:
1.所有模块列表(实际项目)。
作为 Spring Boot 应用程序的一部分,我们还将添加 spring-boot-starter-parent 依赖项。它是父 POM,为基于 Spring Boot 的应用程序提供依赖和插件管理。此步骤是可选的,但强烈建议用于 Spring Boot 应用程序。要创建父项目,我们有以下 2 个选项:
1.手动创建pom.xml
。
1.使用maven快速启动原型
让我们使用第二个选项来生成父项目。
mvn archetype:generate -DgroupId=com.javadevjournal
-DartifactId=spring-boot-multi-module-project
-DarchetypeArtifactId=maven-archetype-quickstart
-DinteractiveMode=false
运行上述命令后,Maven 将为我们创建一个结构以及 pom.xml
文件。将此父模块的包装类型更改为 pom。这就是最终的 pom.xml
的样子。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.javadevjournal</groupId>
<artifactId>spring-boot-multi-module-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<name>spring-boot-multi-module-project</name>
<url>https://www.javadevjournal.com</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java-version>1.8</java-version>
</properties>
<modules>
<module>jdj-core</module>
<module>jdj-web</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
在我们的 pom.xml
文件中,我们将 spring-boot-starter 定义为全局依赖项(因为我们在所有模块中都需要它)。我们将在项目中创建两个目录。这 2 个目录代表父 pom.xml
文件中定义的子模块。
<modules>
<module>jdj-core</module>
<module>jdj-web</module>
</modules>
让我们创建我们的子模块。我们可以根据我们的要求定义任何子模块。定义相互依赖的子模块(如核心模块和依赖于核心模块的web模块)或定义独立模块。模块结构没有限制或限制,完全基于个别项目需求。我们正在定义以下结构。
1.模块用jar包装。
让我们创建我们的核心模块。我们将在我们的核心模块中定义一个简单的客户服务。对于本文,让我们使用 Spring 初始化程序创建我们的核心模块,但您可以使用 IDE 或通过 maven 来创建它。
我没有在模块中选择任何依赖项,但您可以根据需要添加(在本节中添加特定于模块的依赖项,对于应用程序范围的依赖项,请使用父模块 pom)。单击“生成按钮”将项目下载到本地计算机。使用基于 Spring Boot 的多模块项目的最大好处之一是能够在一个地方定义全局依赖项,并让子模块重复使用这些配置而无需复制它。
这就是我们的 jdj-core pom.xml
的样子:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.javadevjournal</groupId>
<artifactId>spring-boot-multi-module-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.javadevjournal</groupId>
<artifactId>jdj-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jdj-core</name>
<description>Core module for our multi module Spring Boot application</description>
</project>
这个 pom.xml
的有趣部分是 <parent> 标签。此标签允许 maven 从本地存储库(或代理,如 nexus)读取父 POM,并通过合并来自父 POM 和模块 POM 的信息来创建“有效 POM”。
<parent>
<groupId>org.javadevjournal</groupId>
<artifactId>spring-boot-multi-module-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
我们正在定义一个简单的 CustomerService
类。该服务类将根据客户 ID 返回客户信息。这是一个简单的类,但展示了这些不同的模块如何在 Maven 多模块项目中协同工作。
package com.javadevjournal.service.customer;
import com.javadevjournal.data.customer.Customer;
import org.springframework.stereotype.Service;
@Service("customerService")
public class DefaultCustomerService implements CustomerService {
@Override
public Customer getCustomerById(String id) {
return new Customer("Test", "Customer", id, "[email protected]");
}
}
接下来,我们有 web 模块。我们的 web 模块还依赖于核心模块(用于客户服务)。我们将使用 Spring Boot 创建 Web 模块。我们可以使用 IDE 或 spring Initializr 来创建 web 模块。
这就是 pom.xml
的样子:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.javadevjournal</groupId>
<artifactId>spring-boot-multi-module-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.javadevjournal</groupId>
<artifactId>jdj-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>jdj-web</name>
<description>Web module for our multi module Spring Boot application</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.javadevjournal</groupId>
<artifactId>jdj-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<finalName>javadev-web</finalName>
</build>
</project>
让我们看一下我们的 web 模块中的一些重要点:
<parent>
标签的帮助下利用 Spring Boot 依赖管理。jdj-core
jar 和 Spring Boot web 模块作为附加依赖项包括在内。<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.javadevjournal</groupId>
<artifactId>jdj-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
为了测试我们的应用程序并查看多模块应用程序是如何工作的,让我们在 web 模块中创建一个简单的客户控制器,具有以下功能。
1.客户控制器将使用核心模块中定义的客户服务。
1.客服根据ID返回客户数据。
这就是 CustomerController
的样子:
@RestController
@RequestMapping("/customers")
public class CustomerController {
@Resource(name = "customerService")
CustomerService customerService;
@GetMapping("/customer/{id}")
public Customer getCustomer(@PathVariable String id) {
return customerService.getCustomerById(id);
}
}
出于偏好目的,这是我们的多模块应用程序在 Java 编辑器中的外观:
要构建我们的应用程序,请转到父模块文件夹并运行 mvn clean install
命令。 Maven 将根据我们父 pom.xml 中的配置开始构建所有模块。
$ mvn clean install
INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO]
[INFO] spring-boot-multi-module-project [pom]
[INFO] jdj-core [jar]
[INFO] jdj-web [jar]
[INFO]
[INFO] --------< org.javadevjournal:spring-boot-multi-module-project >---------
[INFO] Building spring-boot-multi-module-project 0.0.1-SNAPSHOT [1/3]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ spring-boot-multi-module-project ---
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ spring-boot-multi-module-project ---
[INFO] Installing /Users/Javadevjournal/javadevjournal-git/Spring-Boot/spring-boot-multi-module-project/pom.xml to /Users/.m2/repository/org/javadevjournal/spring-boot-multi-module-project/0.0.1-SNAPSHOT/spring-boot-multi-module-project-0.0.1-SNAPSHOT.pom
[INFO]
[INFO] --------------------< com.javadevjournal:jdj-core >---------------------
[INFO] Building jdj-core 0.0.1-SNAPSHOT [2/3]
[INFO] --------------------------------[ jar ]---------------------------------
............
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:3.1.2:jar (default-jar) @ jdj-web ---
[INFO] Building jar: /Users/Javadevjournal/javadevjournal-git/Spring-Boot/spring-boot-multi-module-project/jdj-web/target/javadev-web.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.2.4.RELEASE:repackage (repackage) @ jdj-web ---
[INFO] Replacing main artifact with repackaged archive
[INFO]
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ jdj-web ---
[INFO] Installing /Users/Javadevjournal/javadevjournal-git/Spring-Boot/spring-boot-multi-module-project/jdj-web/target/javadev-web.jar to /Users/.m2/repository/com/javadevjournal/jdj-web/0.0.1-SNAPSHOT/jdj-web-0.0.1-SNAPSHOT.jar
[INFO] Installing /Users/Javadevjournal/javadevjournal-git/Spring-Boot/spring-boot-multi-module-project/jdj-web/pom.xml to /Users/.m2/repository/com/javadevjournal/jdj-web/0.0.1-SNAPSHOT/jdj-web-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for spring-boot-multi-module-project 0.0.1-SNAPSHOT:
[INFO]
[INFO] spring-boot-multi-module-project ................... SUCCESS [ 1.476 s]
[INFO] jdj-core ........................................... SUCCESS [ 3.720 s]
[INFO] jdj-web ............................................ SUCCESS [ 12.325 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 19.005 s
[INFO] Finished at: 2020-02-01T19:43:56-08:00
[INFO] ------------------------------------------------------------------------
您一定已经注意到,当构建开始时,Maven 会显示构建顺序(我们在父 pom.xml
文件中定义的)。要运行我们的应用程序,我们可以通过传递我们的应用程序名称来使用父模块中的以下命令。
mvn spring-boot:run -pl jdj-web
或者我们可以去具体的模块,不带-pl
运行上面的命令。
一旦我们启动我们的应用程序,就该测试我们的应用程序了,打开 http://localhost:8080/customers/customer/1,点击 URL:
1.我们的CustomerController
会被触发。
1、自定义控制器会调用jdj-core
模块中定义的客服。
在本文中,我们看到了**如何使用 *Spring Boot 创建多模块项目。***我们还看到了在 Spring Boot 应用程序中使用多模块 maven 项目的好处和灵活性。此应用程序的源代码可在 GitHub 上找到。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.javadevjournal.com/spring-boot/multi-module-project-with-spring-boot/
内容来源于网络,如有侵权,请联系作者删除!