Contents

使用Spring Boot创建一个胖Jar应用程序

1. 简介

近年来,最令人振奋的发展之一是不断简化 Web 应用程序的部署方式。

跳过所有无聊的中间历史步骤,我们到达了今天——我们不仅可以免除繁琐的 servlet 和 XML 样板,而且主要是服务器本身。

本文将专注于从 Spring Boot 应用程序中创建一个“ fat jar” ——基本上是创建一个易于部署和运行的单个工件。

Boot 提供了开箱即用的无容器部署功能:我们需要做的就是在pom.xml 中添加一些配置:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>2.4.0</version>
    </dependency>
</dependencies>
<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.4.0</version>
    </plugin>
</plugins>

2.构建并运行

有了这个配置,我们现在可以简单地使用标准的mvn clean install构建项目——这里没有什么不寻常的。

我们使用以下命令运行它:java -jar artifact-name – 非常简单直观。

正确的进程管理超出了本文的范围,但即使在我们注销服务器时也能保持进程运行的一种简单方法是使用nohup命令:nohup java -jar artifact-name

停止spring-boot项目也与停止常规进程没有什么不同,无论我们只是简单地Ctrl + ckill pid

3. 胖Jar/胖War

在幕后,spring-boot将最终工件中的所有项目依赖项与项目类一起打包(因此是“胖”jar)。嵌入式 Tomcat 服务器也是内置的。

因此,生成的工件是完全独立的,易于使用标准 Unix 工具(scp、sftp…等)进行部署,并且可以在任何带有 JVM 的服务器上运行。

默认情况下,Boot 会创建一个jar文件——但如果我们将pom.xml中的package属性更改为war,Maven 会自然而然地构建一个 war

这当然既可以作为独立执行,也可以部署到 Web 容器中。

4. 进一步配置

大多数时候不需要额外的配置,一切都“正常工作”,但在某些特定情况下,我们可能需要明确告诉spring-boot主类是什么。一种方法是添加一个属性:

<properties>
    <start-class>com.blogdemo.boot.Application</start-class>
</properties>

如果我们没有继承 spring-boot-starter-parent 我们需要在 Maven 插件中进行:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>2.4.0</version>
    <configuration>
        <mainClass>com.blogdemo.boot.Application</mainClass>
        <layout>ZIP</layout>
    </configuration>
</plugin>

在极少数情况下我们可能需要做的另一件事是指示 MavenUnpack一些依赖项:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <requiresUnpack>
            <dependency>
                <groupId>org.jruby</groupId>
                <artifactId>jruby-complete</artifactId>
            </dependency>
        </requiresUnpack>
    </configuration>
</plugin>