# 4. 入门

如果您正在开始使用 Spring Boot 或一般的“Spring”，请先阅读本节。它回答了基本的“什么？”、“如何？” 和“为什么？” 问题。它包括 Spring Boot 的介绍以及安装说明。然后，我们将引导您构建您的第一个 Spring Boot 应用程序，并讨论一些核心原则。

#### 4.1. Spring Boot 简介

Spring Boot 可帮助您创建可以运行的独立的、生产级的、基于 Spring 的应用程序。我们对 Spring 平台和第三方库采取固执己见的观点，以便您可以轻松上手。大多数 Spring Boot 应用程序只需要很少的 Spring 配置。

您可以使用 Spring Boot 创建可以通过使用`java -jar`或更传统的 war 部署来启动的 Java 应用程序。

我们的主要目标是：

* 为所有 Spring 开发提供更快、更广泛的入门体验。
* 开箱即用，但当需求开始偏离默认值时，要迅速摆脱困境。
* 提供一系列大型项目通用的非功能特性（例如嵌入式服务器、安全性、指标、运行状况检查和外部化配置）。
* 绝对没有代码生成（当不针对本机图像时）并且不需要 XML 配置。

#### 4.2. 系统要求

Spring Boot 3.2.0 需要[Java 17](https://www.java.com/)，并且兼容 Java 21（包括 Java 21）。 还需要[Spring Framework 6.1.1或更高版本。](https://docs.spring.io/spring-framework/reference/6.1/)

为以下构建工具提供显式构建支持：

| 构建工具   | 版本                  |
| ------ | ------------------- |
| Maven  | 3.6.3 或更高版本         |
| Gradle | 7.x（7.5 或更高版本）和 8.x |

**4.2.1. Servlet 容器**

Spring Boot 支持以下嵌入式 servlet 容器：

| 姓名           | 小服务程序版本 |
| ------------ | ------- |
| Tomcat 10.1  | 6.0     |
| Jetty 12.0   | 6.0     |
| Undertow 2.3 | 6.0     |

您还可以将 Spring Boot 应用程序部署到任何 servlet 5.0+ 兼容容器。

**4.2.2. GraalVM 本机镜像**

Spring Boot 应用程序可以使用 GraalVM 22.3 或更高版本转换为 [Native Image](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#native-image.introducing-graalvm-native-images)。

可以使用[本机构建工具](https://github.com/graalvm/native-build-tools)Gradle/Maven 插件或GraalVM 提供的`native-image`工具来创建映像。[您还可以使用本机映像 Paketo buildpack](https://github.com/paketo-buildpacks/native-image)创建本机映像。

支持以下版本：

| 姓名                         | 版本     |
| -------------------------- | ------ |
| GraalVM Community          | 22.3   |
| 本机构建工具（Native Build Tools） | 0.9.28 |

#### 4.3. 安装 Spring Boot

Spring Boot 可以与“经典”Java 开发工具一起使用，也可以作为命令行工具安装。无论哪种方式，您都需要[Java SDK v17](https://www.java.com/)或更高版本。在开始之前，您应该使用以下命令检查当前的 Java 安装：

```
$ java -version
```

如果您是 Java 开发新手或者想要尝试 Spring Boot，您可能需要首先尝试[Spring Boot CLI](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#getting-started.installing.cli)（命令行界面）。否则，请继续阅读“经典”安装说明。

**4.3.1. Java 开发人员安装说明**

您可以像使用任何标准 Java 库一样使用 Spring Boot。为此，请在类路径中包含适当的`spring-boot-*.jar`文件。Spring Boot 不需要集成任何特殊工具，因此您可以使用任何 IDE 或文本编辑器。此外，Spring Boot 应用程序没有什么特别之处，因此您可以像运行任何其他 Java 程序一样运行和调试 Spring Boot 应用程序。

尽管您*可以*复制 Spring Boot jar，但我们通常建议您使用支持依赖项管理的构建工具（例如 Maven 或 Gradle）。

**Maven安装**

Spring Boot 与 Apache Maven 3.6.3 或更高版本兼容。如果您尚未安装 Maven，可以按照[maven.apache.org](https://maven.apache.org/)上的说明进行操作。

> 在许多操作系统上，Maven 可以通过包管理器安装。如果您使用 OSX Homebrew，请尝试`brew install maven`. Ubuntu 用户可以运行`sudo apt-get install maven`. [使用Chocolatey](https://chocolatey.org/)的 Windows 用户可以`choco install maven`从提升的（管理员）提示符下运行。

Spring Boot 依赖项使用组 ID`org.springframework.boot`。通常，您的 Maven POM 文件继承自`spring-boot-starter-parent`项目并声明对一个或多个[“Starters”](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.starters)的依赖关系。Spring Boot 还提供了一个可选的[Maven 插件](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins.maven)来创建可执行 jar。

有关 Spring Boot 和 Maven 入门的更多详细信息，请参阅Maven 插件参考指南的[入门部分。](https://docs.spring.io/spring-boot/docs/3.2.0/maven-plugin/reference/htmlsingle/#getting-started)

**Gradle安装**

Spring Boot 与 Gradle 7.x（7.5 或更高版本）和 8.x 兼容。如果您尚未安装 Gradle，您可以按照[gradle.org](https://gradle.org/)上的说明进行操作。

Spring Boot 依赖项可以使用`org.springframework.boot` `group`. 通常，您的项目会声明对一个或多个[“Starters”](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.starters)的依赖关系。Spring Boot 提供了一个有用的[Gradle 插件](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#build-tool-plugins.gradle)，可用于简化依赖项声明并创建可执行 jar。

Gradle 包装器

当您需要构建项目时，Gradle Wrapper 提供了一种“获取”Gradle 的好方法。它是一个小脚本和库，您可以将其与代码一起提交以引导构建过程。有关详细信息，请参阅[docs.gradle.org/current/userguide/gradle\_wrapper.html](https://docs.gradle.org/current/userguide/gradle_wrapper.html)。

有关 Spring Boot 和 Gradle 入门的更多详细信息，请参阅Gradle 插件参考指南的[入门部分。](https://docs.spring.io/spring-boot/docs/3.2.0/gradle-plugin/reference/htmlsingle/#getting-started)

**4.3.2. 安装 Spring Boot CLI**

Spring Boot CLI（命令行界面）是一个命令行工具，可用于使用 Spring 快速构建原型。

您不需要使用 CLI 来使用 Spring Boot，但它是无需 IDE 即可启动 Spring 应用程序的快速方法。

**手动安装**

您可以从以下位置之一下载 Spring CLI 发行版：

* [spring-boot-cli-3.2.0-bin.zip](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-cli/3.2.0/spring-boot-cli-3.2.0-bin.zip)
* [spring-boot-cli-3.2.0-bin.tar.gz](https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-cli/3.2.0/spring-boot-cli-3.2.0-bin.tar.gz)

下载后，按照解压存档中的[INSTALL.txt说明进行操作。](https://raw.githubusercontent.com/spring-projects/spring-boot/v3.2.0/spring-boot-project/spring-boot-tools/spring-boot-cli/src/main/content/INSTALL.txt)总之，`.zip`文件的 `bin/` 目录中有一个 spring 脚本（Windows 下为 spring.bat）。或者，您可以将`java -jar`与`.jar`文件一起使用（该脚本可帮助您确保类路径设置正确）。

**用SDKMAN安装！**

SDKMAN！（软件开发工具包管理器）可用于管理各种二进制 SDK 的多个版本，包括 Groovy 和 Spring Boot CLI。从[sdkman.io](https://sdkman.io/)获取 SDKMAN！并使用以下命令安装 Spring Boot：

```
$ sdk install springboot
$ spring --version
Spring CLI v3.2.0
```

如果您为 CLI 开发功能并希望访问您构建的版本，请使用以下命令：

```
$ sdk install springboot dev /path/to/spring-boot/spring-boot-cli/target/spring-boot-cli-3.2.0-bin/spring-3.2.0/
$ sdk default springboot dev
$ spring --version
Spring CLI v3.2.0
```

前面的说明安装了一个名为 `dev` 实例的`spring` 本地实例。它指向您的目标构建位置，因此每次您重建 Spring Boot 时，`spring` 都是最新的。

您可以通过运行以下命令来查看它：

```
$ sdk ls springboot
​
================================================================================
Available Springboot Versions
================================================================================
> + dev
* 3.2.0
​
================================================================================
+ - local version
* - installed
> - currently in use
================================================================================
```

**OSX 自制软件安装**

如果您使用的是 Mac 并使用[Homebrew](https://brew.sh/)，则可以使用以下命令安装 Spring Boot CLI：

```
$ brew tap spring-io/tap
$ brew install spring-boot
```

Homebrew 会安装`spring`到`/usr/local/bin`.

> 如果您没有看到该公式，则您安装的brew 可能已过时。在这种情况下，请运行`brew update`并重试。

**MacPorts安装**

如果您使用的是 Mac 并使用[MacPorts](https://www.macports.org/)，则可以使用以下命令安装 Spring Boot CLI：

```
$ sudo port install spring-boot-cli
```

**命令行完成**

Spring Boot CLI 也包含为[BASH](https://en.wikipedia.org/wiki/Bash_\(Unix_shell\))和[zsh](https://en.wikipedia.org/wiki/Z_shell) shell 提供命令完成的脚本。您可以在任何 shell 中获取该脚本（也称为`spring`），或者将其放入您的个人或系统范围的 bash 完成初始化中。，或者将其放入您的个人或系统范围的 bash 完成初始化中。在 Debian 系统上，系统范围的脚本位于其中，`<installation location>/shell-completion/bash`并且在新 shell 启动时执行该目录中的所有脚本。例如，如果您已使用 SDKMAN! 安装，则要手动运行脚本，请使用以下命令：

```
$ . ~/.sdkman/candidates/springboot/current/shell-completion/bash/spring
$ spring <HIT TAB HERE>
  grab  help  jar  run  test  version
```

> 如果您使用 Homebrew 或 MacPorts 安装 Spring Boot CLI，命令行完成脚本将自动注册到您的 shell。

**Windows Scoop 安装**

如果您在 Windows 上并使用[Scoop](https://scoop.sh/)，则可以使用以下命令安装 Spring Boot CLI：

```
> scoop bucket add extras
> scoop install springboot
```

Scoop 安装`spring`到`~/scoop/apps/springboot/current/bin`.

> 如果您没有看到应用程序清单，则您安装的 scoop 可能已过时。在这种情况下，请运行`scoop update`并重试。

#### 4.4. 开发您的第一个 Spring Boot 应用程序

本节介绍如何开发一个小型的“Hello World！” Web 应用程序，突出显示了 Spring Boot 的一些关键功能。您可以选择 Maven 或 Gradle 作为构建系统。

> spring.io网站包含许多使用 Spring Boot 的[“](https://spring.io/)入门”[指南。](https://spring.io/guides)如果您需要解决特定问题，请先检查那里。[您可以通过转至start.spring.io](https://start.spring.io/)并从依赖项搜索器中选择“Web”启动器来快捷执行以下步骤。这样做会生成一个新的项目结构，以便您可以[立即开始编码](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#getting-started.first-application.code)。查看[start.spring.io 用户指南](https://github.com/spring-io/start.spring.io/blob/main/USING.adoc)了解更多详细信息。

**4.4.1. 先决条件**

在开始之前，打开终端并运行以下命令以确保您安装了有效版本的 Java：

```
$ java -version
openjdk version "17.0.4.1" 2022-08-12 LTS
OpenJDK Runtime Environment (build 17.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM (build 17.0.4.1+1-LTS, mixed mode, sharing)
```

> 该示例需要在其自己的目录中创建。后续说明假定您已创建合适的目录并且它是您的当前目录。

**Maven**

如果要使用 Maven，请确保已安装 Maven：

```
$ mvn -v
Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0)
Maven home: usr/Users/developer/tools/maven/3.8.5
Java version: 17.0.4.1, vendor: BellSoft, runtime: /Users/developer/sdkman/candidates/java/17.0.4.1-librca
```

**Gradle**

如果您想使用 Gradle，请确保已安装 Gradle：

```
$ gradle --version
​
------------------------------------------------------------
Gradle 8.1.1
------------------------------------------------------------
​
Build time:   2023-04-21 12:31:26 UTC
Revision:     1cf537a851c635c364a4214885f8b9798051175b
​
Kotlin:       1.8.10
Groovy:       3.0.15
Ant:          Apache Ant(TM) version 1.10.11 compiled on July 10 2021
JVM:          17.0.7 (BellSoft 17.0.7+7-LTS)
OS:           Linux 6.2.12-200.fc37.aarch64 aarch64
```

**4.4.2. 使用 Maven 设置项目**

我们需要首先创建一个 Maven`pom.xml`文件。这`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>
​
    <groupId>com.example</groupId>
    <artifactId>myproject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
​
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.0</version>
    </parent>
​
    <!-- Additional lines to be added here... -->
​
</project>
```

前面的清单应该为您提供一个工作版本。您可以通过运行来测试它`mvn package`（目前，您可以忽略“jar将为空 - 没有内容被标记为包含！”警告）。

> 此时，您可以将项目导入 IDE（大多数现代 Java IDE 都包含对 Maven 的内置支持）。为简单起见，我们在此示例中继续使用纯文本编辑器。

**4.4.3. 使用 Gradle 设置项目**

我们需要首先创建一个 Gradle`build.gradle`文件。这`build.gradle`是用于构建项目的构建脚本。打开您最喜欢的文本编辑器并添加以下内容：

```
plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.0'
}
​
apply plugin: 'io.spring.dependency-management'
​
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
​
repositories {
    mavenCentral()
}
​
dependencies {
}
```

前面的清单应该为您提供一个工作版本。您可以通过运行来测试它`gradle classes`。

> 此时，您可以将项目导入 IDE（大多数现代 Java IDE 都包含对 Gradle 的内置支持）。为简单起见，我们在此示例中继续使用纯文本编辑器。

**4.4.4. 添加类路径依赖项**

Spring Boot 提供了许多“Starters”，可让您将 jar 添加到类路径中。“Starters”提供了开发特定类型的应用程序时可能需要的依赖项。

**Maven**

大多数 Spring Boot 应用程序在POM的`parent` 部分中使用`spring-boot-starter-parent`。`spring-boot-starter-parent`是一个特殊的启动器，提供有用的 Maven 默认值。它还提供了一个[`dependency-management`](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.dependency-management)部分，以便您可以省略依赖项的`version`标签。

由于我们正在开发一个 Web 应用程序，因此我们添加了一个`spring-boot-starter-web`依赖项。在此之前，我们可以通过运行以下命令来查看当前拥有的内容：

```
$ mvn dependency:tree
​
[INFO] com.example:myproject:jar:0.0.1-SNAPSHOT
```

`mvn dependency:tree`命令打印项目依赖项的树表示。您可以看到`spring-boot-starter-parent`本身不提供依赖项。要添加必要的依赖项，请编辑`pom.xml`并添加`spring-boot-starter-web`紧邻该部分下方的依赖项`parent`：

```
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
```

如果再次运行`mvn dependency:tree`，您会发现现在有许多额外的依赖项，包括 Tomcat Web 服务器和 Spring Boot 本身。

**Gradle**

大多数 Spring Boot 应用程序都使用`org.springframework.boot` Gradle 插件。该插件提供有用的默认值和 Gradle 任务。`io.spring.dependency-management`Gradle插件提供[依赖项管理](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.build-systems.dependency-management)，以便您可以省略依赖项的`version`标签。

由于我们正在开发一个 Web 应用程序，因此我们添加了一个`spring-boot-starter-web`依赖项。在此之前，我们可以通过运行以下命令来查看当前拥有的内容：

```
$ gradle dependencies
​
> Task :dependencies
​
------------------------------------------------------------
Root project 'myproject'
------------------------------------------------------------
```

`gradle dependencies`命令打印项目依赖项的树表示。目前，该项目没有依赖项。要添加必要的依赖项，请编辑您`build.gradle`的依赖项并在`dependencies`部分中添加`spring-boot-starter-web`依赖项：

```
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
}
```

如果再次运行`gradle dependencies`，您会发现现在有许多额外的依赖项，包括 Tomcat Web 服务器和 Spring Boot 本身。

**4.4.5. 编写代码**

为了完成我们的应用程序，我们需要创建一个 Java 文件。默认情况下，Maven 和 Gradle 从`src/main/java`编译源代码，因此您需要创建该目录结构，然后添加一个名为`src/main/java/MyApplication.java`包含以下代码的文件：

```
package com.example;
​
@RestController
@SpringBootApplication
public class MyApplication {
​
    @RequestMapping("/")
    String home() {
        return "Hello World!";
    }
​
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
​
}
```

虽然这里没有太多代码，但已经做了很多事情。我们将在接下来的几节中逐步介绍重要部分。

**@RestController 和 @RequestMapping 注解**

我们类的第一个注释`MyApplication`是`@RestController`. 这称为*构造型*注释。它为阅读代码的人提供提示，并为 Spring 提供该类扮演特定角色的提示。在本例中，我们的类是一个 web `@Controller`，因此 Spring 在处理传入的 Web 请求时会考虑它。

`@RequestMapping`注释提供“路由”信息。它告诉 Spring 任何具有该`/`路径的 HTTP 请求都应该映射到`home`方法。`@RestController`注释告诉 Spring 将结果字符串直接渲染回调用者。

> `@RestController`和`@RequestMapping`注释是 Spring MVC 注释（它们不特定于 Spring Boot）。有关更多详细信息，请参阅Spring 参考文档中的 [MVC 部分。](https://docs.spring.io/spring-framework/reference/6.1/web/webmvc.html)

**@SpringBootApplication 注解**

第二个类级注释是`@SpringBootApplication`。该注释称为*元注释*，它结合了`@SpringBootConfiguration`,`@EnableAutoConfiguration`和`@ComponentScan`。

其中，我们最感兴趣的注释是`@EnableAutoConfiguration`. `@EnableAutoConfiguration`告诉 Spring Boot 根据您添加的 jar 依赖项“猜测”您想要如何配置 Spring。由于`spring-boot-starter-web`添加了 Tomcat 和 Spring MVC，自动配置假定您正在开发 Web 应用程序并相应地设置 Spring。

> **启动器和自动配置**
>
> 自动配置旨在与“初学者”很好地配合，但这两个概念并不直接相关。您可以自由选择启动程序之外的 jar 依赖项。Spring Boot 仍然尽力自动配置您的应用程序。

**“main”方法**

我们应用程序的最后一部分是`main`方法。这是遵循 Java 应用程序入口点约定的标准方法。我们的 main 方法通过调用`run`委托给 Spring Boot 的`SpringApplication`类。 `SpringApplication`引导我们的应用程序，启动 Spring，进而启动自动配置的 Tomcat Web 服务器。我们需要将`MyApplication.class`作为参数传递给该`run`方法来让`SpringApplication`判断哪个是主要的 Spring 组件。`args`数组也会被传递以公开任何命令行参数。

**4.4.6. 运行示例**

**Maven**

此时，您的应用程序应该可以运行。由于您使用了`spring-boot-starter-parent`POM，您就有了一个可以用来启动应用程序的有用`run`目标。从根项目目录键入`mvn spring-boot:run`以启动应用程序。您应该看到类似于以下内容的输出：

```
$ mvn spring-boot:run
​
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v3.2.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.906 seconds (process running for 6.514)
```

如果您打开 Web 浏览器`localhost:8080`，您应该看到以下输出：

```
你好世界！
```

要正常退出应用程序，请按`ctrl-c`。

**Gradle**

此时，您的应用程序应该可以运行。由于您使用了`org.springframework.boot`Gradle 插件，您就有了一个可以用来启动应用程序的有用`bootRun`目标。从根项目目录键入`gradle bootRun`以启动应用程序。您应该看到类似于以下内容的输出：

```
$ gradle bootRun
​
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v3.2.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.906 seconds (process running for 6.514)
```

如果您打开 Web 浏览器`localhost:8080`，您应该看到以下输出：

```
你好世界！
```

要正常退出应用程序，请按`ctrl-c`。

**4.4.7. 创建可执行 Jar**

我们通过创建一个可以在生产中运行的完全独立的可执行 jar 文件来完成我们的示例。可执行 jar（有时称为“uber jar”或“fat jar”）是包含已编译类以及代码运行所需的所有 jar 依赖项的档案。

> **可执行 jar 和 Java**
>
> Java 不提供加载嵌套 jar 文件（本身包含在 jar 中的 jar 文件）的标准方法。如果您希望分发独立的应用程序，这可能会出现问题。
>
> 为了解决这个问题，许多开发人员使用“uber”jar。uber jar 将所有应用程序依赖项中的所有类打包到一个存档中。这种方法的问题是很难看出应用程序中有哪些库。如果在多个 jar 中使用相同的文件名（但内容不同），也可能会出现问题。
>
> Spring Boot 采用了[不同的方法](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#appendix.executable-jar)，让您可以直接嵌套 jar。

**`gradle bootRun`**

要创建可执行 jar，我们需要将其添加`spring-boot-maven-plugin`到我们的`pom.xml`. 为此，请在该`dependencies`部分下方插入以下行：

```
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
```

`spring-boot-starter-parent`POM包含绑定`repackage`目标的`<executions>`配置。如果不使用父POM，则需要自己声明此配置。有关详细信息，请参阅[插件文档](https://docs.spring.io/spring-boot/docs/3.2.0/maven-plugin/reference/htmlsingle/#getting-started)。

保存`pom.xml`并从命令行运行`mvn package`，如下所示：

```
$ mvn package
​
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building myproject 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] .... ..
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject ---
[INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:3.2.0:repackage (default) @ myproject ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
```

如果您查看目录`target`，您应该会看到`myproject-0.0.1-SNAPSHOT.jar`. 文件大小应约为 18 MB。如果你想查看内部，可以使用`jar tvf`，如下所示：

```
$ jar tvf target/myproject-0.0.1-SNAPSHOT.jar
```

您还应该在`target`目录中看到一个更小的文件`myproject-0.0.1-SNAPSHOT.jar.original`。这是 Maven 在被 Spring Boot 重新打包之前创建的原始 jar 文件。

要运行该应用程序，请使用`java -jar`以下命令：

```
$ java -jar target/myproject-0.0.1-SNAPSHOT.jar
​
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v3.2.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.999 seconds (process running for 1.253)
```

和以前一样，要退出应用程序，请按`ctrl-c`。

**Gradle**

要创建可执行 jar，我们需要从命令行运行`gradle bootJar`，如下所示：

```
$ gradle bootJar
​
BUILD SUCCESSFUL in 639ms
3 actionable tasks: 3 executed
```

如果您查看`build/libs`目录，您应该会看到`myproject-0.0.1-SNAPSHOT.jar`. 文件大小应约为 18 MB。如果你想查看内部，可以使用`jar tvf`，如下所示：

```
$ jar tvf build/libs/myproject-0.0.1-SNAPSHOT.jar
```

要运行该应用程序，请使用`java -jar`以下命令：

```
$ java -jar build/libs/myproject-0.0.1-SNAPSHOT.jar
​
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::  (v3.2.0)
....... . . .
....... . . . (log output here)
....... . . .
........ Started MyApplication in 0.999 seconds (process running for 1.253)
```

和以前一样，要退出应用程序，请按`ctrl-c`。

#### 4.5. 接下来读什么

希望本节提供了一些 Spring Boot 基础知识，并帮助您编写自己的应用程序。如果您是面向任务的开发人员，您可能想跳到[spring.io](https://spring.io/)并遵循一些[入门](https://spring.io/guides/)指南来解决特定的“如何使用 Spring 做到这一点？” 问题。我们还有 Spring Boot 特定的“[操作方法](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto)”参考文档。

否则，下一个逻辑步骤是阅读[*使用 Spring Boot 进行开发*](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using)。如果你真的不耐烦，你也可以直接阅读[*Spring Boot 特性*](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#features)。

<br>
