知識庫 / Spring / Spring Boot RSS 訂閱

使用 Spring Boot 創建一個 Fat Jar 應用

DevOps,Spring Boot
HongKong
4
02:43 PM · Dec 06 ,2025

1. 引言

近年來,Web應用程序部署方式的簡化是一個令人振奮的發展。

省略冗長的歷史背景,我們來到了今天——我們不再需要使用繁瑣的 Servlet 和 XML 樣板代碼,更主要的是,不再需要服務器本身。

本文將集中討論如何將 Spring Boot 應用程序打包為一個“胖 JAR”文件——即創建一個易於部署和運行的單個工件。

Boot 提供了容器無服務器部署的能力,只需在 pom.xml 中添加幾行配置即可:

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

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

2. 構建與運行

採用此配置後,我們可以只需使用標準命令 mvn clean install 構建項目,此處無需特殊處理。

運行項目則使用以下命令: java -jar <artifact-name>,操作簡單直觀。

進程管理超出了本文的範圍,但為了在註銷服務器時也能保持進程運行,可以使用 nohup 命令: nohup java -jar <artifact-name>.

停止 spring-boot 項目與停止普通進程沒有區別,無論我們使用 cntrl+c 還是 kill <pid>.

3. 胖 JAR / 胖戰爭

在幕後,spring-boot 將所有項目依賴打包到最終的 Artifact 中,同時包含項目類(因此產生了“胖” JAR)。 嵌入式 Tomcat 服務器也內置其中。

因此,最終的 Artifact 是完全自包含的,易於使用標準 Unix 工具(scp、sftp…等)部署,並且可以在具有 JVM 的任何服務器上運行。

默認情況下,Boot 創建一個 jar 文件 – 但如果我們更改 pom.xml 中的 packaging 屬性為 war,Maven 將會自然地 構建 WAR 文件

這當然既可作為獨立應用程序執行,也可部署到 Web 容器。

4. 進一步配置

通常情況下,不需要進行額外的配置,一切“就緒運行”,但在某些特定情況下,我們需要明確地告知 spring-boot 主類信息。 可以通過添加一個屬性來實現:

<properties>
    <start-class>org.baeldung.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>org.baeldung.boot.Application</mainClass>
        <layout>ZIP</layout>
    </configuration>
</plugin>

在某些罕見情況下,我們可能還需要指示 Maven 解壓一些依賴項:

<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>

結論

本文介紹了使用由 spring-boot 構建的“胖” JAR 包進行無服務器部署的方法。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.