SpringBoot+Maven 多模块项目的构建、运行、打包实战

yizhihongxing

下面我会详细讲解如何使用SpringBoot和Maven构建多模块项目,包括项目的构建、运行和打包,同时会提供两个实例。

环境准备

在开始构建多模块项目之前,请确保已经安装以下软件:

  • JDK 1.8或以上版本
  • Maven 3.2或以上版本

项目结构

下面是一个简单的多模块项目结构:

.
├── parent
│   ├── pom.xml
│   └── src
│       ├── main
│       └── test
├── module1
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
│       └── test
└── module2
    ├── pom.xml
    └── src
        ├── main
        │   ├── java
        │   └── resources
        └── test

parent 模块是父模块,而 module1module2 是子模块。

parent 模块中,我们会定义一些公共依赖和插件,同时也会将子模块的依赖引入进来。

在子模块中,我们可以定义一些具体的功能模块,每个子模块都有自己独立的 pom.xml 文件。

父模块的 pom.xml

父模块的 pom.xml 文件中应该包含以下信息:

  • groupId:项目组的唯一标识符
  • artifactId:项目的唯一标识符
  • version:项目的版本号
  • packaging:应该设为 pom
  • modules:包含所有子模块的名称

除此之外,我们还可以在父模块中定义一些公共的依赖和插件,供子模块继承。

示例:

<project>
    <groupId>com.example</groupId>
    <artifactId>parent</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <modules>
        <module>module1</module>
        <module>module2</module>
    </modules>
    <dependencies>
        <!-- 公共依赖 -->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>common</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</project>

子模块的 pom.xml

每个子模块都有自己独立的 pom.xml 文件,其中应该包含以下信息:

  • parent:指定父模块的 groupIdartifactIdversion
  • groupId:子模块的唯一标识符,应该与父模块相同
  • artifactId:子模块的唯一标识符
  • version:子模块的版本号
  • packaging:应该根据具体情况设定,默认是 jar
  • dependencies:该子模块所需要的依赖

示例:

<project>
    <!-- 指定父模块 -->
    <parent>
        <groupId>com.example</groupId>
        <artifactId>parent</artifactId>
        <version>1.0.0</version>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>module1</artifactId>
    <version>1.0.0</version>
    <dependencies>
        <!-- 该模块所需要的依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

多模块项目的构建

在多模块项目的根目录下,我们可以使用以下命令构建整个项目:

mvn clean install

这条命令会将整个项目构建并打包成 jar/war 包,并且将这些包安装到本地仓库中。

多模块项目的运行

在多模块项目中,我们需要选择某一个子模块作为入口,然后运行该子模块。在运行指定子模块之前,我们需要先进入该子模块所在的目录。

比如,我们想要运行 module1 子模块,可以使用以下命令:

cd module1
mvn spring-boot:run

这条命令会使用SpringBoot插件启动SpringBoot应用程序,并在控制台输出应用程序的日志。

多模块项目的打包

在多模块项目中,我们可以使用以下命令打包某一个子模块:

cd module1
mvn package

该命令会将 module1 打包成一个 jar 包,并且将该包保存到 target 目录中。

示例1:创建一个简单的 SpringBoot 项目

接下来,我们将创建一个简单的 SpringBoot 项目,用来演示如何使用 Maven 构建多模块项目。

首先,我们需要在 parent 模块中加入 SpringBoot 的依赖:

<dependencies>
    <!-- SpringBoot 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.0</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencies>

然后,我们在 module1 子模块中添加一个简单的 SpringBoot 应用程序,并引入一些必要的依赖:

<dependencies>
    <!-- SpringBoot Web 应用程序依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

Java 代码如下:

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

最后,我们运行以下命令构建整个项目:

mvn clean install

构建成功之后,我们进入 module1 子模块的目录,并运行以下命令:

mvn spring-boot:run

这条命令会启动SpringBoot应用程序,并在控制台中输出应用程序的日志。

示例2:创建一个带有多个子模块的 SpringBoot 项目

接下来,我们将创建一个带有多个子模块的 SpringBoot 项目,用来演示如何构建、运行和打包该项目。

首先,我们在 parent 模块中加入 SpringBoot 的依赖:

<dependencies>
    <!-- SpringBoot 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.0</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
</dependencies>

然后,在 module1 子模块中添加一个简单的 SpringBoot 应用程序,并引入一些必要的依赖:

<dependencies>
    <!-- SpringBoot Web 应用程序依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

Java 代码如下:

@RestController
public class HelloWorldController {
    @GetMapping("/hello")
    public String helloWorld() {
        return "Hello, world!";
    }
}

然后,在 module2 子模块中添加一个简单的测试程序,并引入一些必要的依赖:

<dependencies>
    <!-- JUnit 5 单元测试依赖 -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.8.2</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-engine</artifactId>
        <version>5.8.2</version>
        <scope>test</scope>
    </dependency>

    <!-- SpringBoot 测试依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

Java 代码如下:

public class HelloWorldTest {
    @Test
    public void testHelloWorld() {
        HelloWorldController controller = new HelloWorldController();
        String result = controller.helloWorld();
        assertEquals("Hello, world!", result);
    }
}

最后,在 parentpom.xml 文件中,我们应该按照以下方式指定子模块的路径:

<modules>
    <module>module1</module>
    <module>module2</module>
</modules>

构建整个项目并运行 module1 子模块,可以发现访问 http://localhost:8080/hello 时,返回 Hello, world!

同时,我们也可以运行 module2 子模块中的测试程序:mvn test

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot+Maven 多模块项目的构建、运行、打包实战 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 如何设置一定时间内只能发送一次请求

    要实现一定时间内只能发送一次请求,可以使用令牌桶算法来控制请求的频率。该算法的实现分为两个部分,一个是令牌桶的生成,另一个是令牌桶的消费。 令牌桶的生成 令牌桶生成的过程是不断往桶里添加令牌,直到桶的大小达到了上限。每隔一定时间添加一个令牌,即令牌的添加速率为r(个/s),则添加一个令牌的时间间隔为1/r(s)。 为了保证当前添加令牌的时间间隔不会过大,可以…

    Java 2023年6月15日
    00
  • Java轻松掌握面向对象的三大特性封装与继承和多态

    Java是一门面向对象编程语言,而面向对象编程的三大特性为封装、继承和多态。下面将为大家介绍如何轻松掌握这三大特性。 封装 封装是指将类的属性和方法包装在一起,隐藏了类的实现细节,使得类的使用者只需关注类的功能而不必关心其内部实现。Java中可以通过public、private、protected、default等访问修饰符来实现封装。 以下是一个示例代码,…

    Java 2023年5月26日
    00
  • SpringSecurity oAuth2.0的四种模式(小结)

    SpringSecurity OAuth2.0的四种模式 SpringSecurity OAuth2.0提供了四种授权模式,分别是Authorization Code、Implicit、Resource Owner Password Credentials和Client Credentials。下面将分别对这四种授权模式进行详细讲解。 Authorizati…

    Java 2023年5月20日
    00
  • asp.net 支付宝及时到帐接口使用详解

    ASP.NET支付宝及时到账接口使用详解: 概述 本文主要介绍如何使用ASP.NET集成支付宝及时到账接口,实现在线支付功能。 支付宝是国内常见的第三方支付平台之一,提供了丰富的支付接口。包括但不限于扫码支付、移动支付、Web支付、网页收银台等方式。今天我们要介绍的是ASP.NET集成支付宝即时到账接口。 开始 使用支付宝即时到账接口,需要注册成为支付宝商家…

    Java 2023年6月15日
    00
  • JAVA垃圾收集器与内存分配策略详解

    JAVA垃圾收集器与内存分配策略详解 什么是垃圾收集器 垃圾收集器是Java的内置机制,用于后台自动回收Java虚拟机中不再需要的对象所占据的内存。垃圾收集器可以自动根据程序运行情况来决定回收对象,从而解决了许多手动管理内存的问题。 Java提供了多种垃圾收集器来适应不同的应用场景需求。下面将介绍其中常用的几种垃圾收集器。 常用的垃圾收集器 Serial垃圾…

    Java 2023年5月19日
    00
  • 详解Spring Security如何在权限中使用通配符

    要在Spring Security中使用通配符进行权限管理,需要结合使用Ant风格的路径匹配模式和正则表达式。 首先,在WebSecurityConfigurerAdapter的configure(HttpSecurity http)方法中,我们可以使用Ant风格的路径匹配模式进行权限配置,例如: http.authorizeRequests() .antM…

    Java 2023年5月20日
    00
  • jsp+servlet实现简单登录页面功能(附demo)

    那我就来详细讲解一下“jsp+servlet实现简单登录页面功能(附demo)”的完整攻略。 首先,要了解jsp和servlet的基本概念和用途,jsp主要用于前端页面的展示,servlet主要用于处理后端的业务逻辑和数据交互。在这里,我们需要用到jsp和servlet的合作来实现登录页面功能。 下面我们来分步骤介绍: 步骤一:搭建开发环境 1. 安装JDK…

    Java 2023年6月15日
    00
  • java实现动态编译并动态加载

    Java实现动态编译并动态加载是一种非常强大和灵活的技术。本篇文章将介绍如何实现Java的动态编译和加载,并给出两个示例说明。 动态编译的实现 Java中的动态编译是通过使用Java提供的Compiler API来实现的。在Java中,编译器可以将Java源代码编译成字节码,这些字节码可以直接在Java虚拟机上运行。下面是一些使用Java Compiler …

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部