最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于SpringBoot+JPackage構(gòu)建獨立安裝包的操作流程

 更新時間:2026年01月29日 08:24:03   作者:風(fēng)象南  
從JDK 14開始,Java官方引入了JPackage工具(在JDK 16 正式成為標準功能),它能夠?qū)?nbsp;Java 應(yīng)用打包成特定平臺的原生安裝包,本文將介紹如何使用 JPackage 工具將 Spring Boot 項目打包成 Windows、macOS 或 Linux 平臺的原生安裝包,需要的朋友可以參考下

前言

從 JDK 14 開始,Java 官方引入了 JPackage 工具(在 JDK 16 正式成為標準功能),它能夠?qū)?Java 應(yīng)用打包成特定平臺的原生安裝包,自帶定制化的 JRE 運行環(huán)境。這意味著用戶無需提前安裝 Java 環(huán)境,雙擊安裝包即可完成應(yīng)用部署,極大地簡化了交付流程。

本文將介紹如何使用 JPackage 工具將 Spring Boot 項目打包成 Windows、macOS 或 Linux 平臺的原生安裝包。

一、JPackage 簡介

1.1 什么是 JPackage

JPackage 是 JDK 自帶的打包工具,位于 $JAVA_HOME/bin 目錄下。它的核心功能是:

生成平臺原生安裝包:Windows 的 .exe/.msi、macOS 的 .dmg/.pkg、Linux 的 .deb/.rpm

自定義 JRE:使用 jlink 工具裁剪 JDK,僅打包應(yīng)用所需的模塊,大幅減小安裝包體積

簡化部署:用戶無需預(yù)裝 Java 環(huán)境,安裝包自帶運行時

1.2 JPackage 的優(yōu)勢

傳統(tǒng)部署方式JPackage 方式
需要預(yù)裝 JRE/JDK自帶 JRE,無需額外安裝
環(huán)境版本可能不匹配綁定特定 JRE 版本,環(huán)境一致
手動編寫啟動腳本自動生成啟動器
跨平臺需要多套腳本一鍵生成各平臺安裝包

二、環(huán)境準備

2.1 JDK 版本要求

推薦使用 JDK 17 或更高版本(JPackage 在 JDK 16 才成為標準功能,JDK 17 是 LTS 版本)

確認 JPackage 可用:

jpackage --version

2.2 平臺特定工具

根據(jù)目標操作系統(tǒng),需要安裝對應(yīng)的打包工具:

Windows

WiX Toolset 3.11+(用于生成 .msi 安裝包)
下載地址:wixtoolset.org/
安裝后將 bin 目錄添加到系統(tǒng)環(huán)境變量 PATH

macOS

Xcode 命令行工具(用于生成 .dmg/.pkg

xcode-select --install

Linux

Debian/Ubuntu:安裝 fakeroot

sudo apt-get install fakeroot

RedHat/CentOS:安裝 rpm-build

sudo yum install rpm-build

三、Spring Boot 項目準備

3.1 示例項目結(jié)構(gòu)

假設(shè)我們有一個標準的 Spring Boot 項目:

my-springboot-app/
├── src/
│   └── main/
│       ├── java/
│       └── resources/
├── pom.xml
└── target/
    └── my-app-1.0.0.jar

3.2 構(gòu)建可執(zhí)行 JAR

首先使用 Maven 或 Gradle 構(gòu)建項目:

# Maven
mvn clean package

# Gradle
gradle clean build

確保生成的 JAR 包是可執(zhí)行的(Spring Boot 默認打包方式)。

四、使用 JPackage 打包

4.1 基礎(chǔ)打包命令

以下是一個基礎(chǔ)的 JPackage 命令示例(以 Windows 為例):

jpackage \
  --input target \
  --name MySpringBootApp \
  --main-jar my-app-1.0.0.jar \
  --main-class org.springframework.boot.loader.JarLauncher \
  --type msi \
  --app-version 1.0.0 \
  --vendor "我的公司" \
  --description "基于 Spring Boot 的企業(yè)級應(yīng)用" \
  --icon src/main/resources/app-icon.ico \
  --win-dir-chooser \
  --win-menu \
  --win-shortcut

參數(shù)說明

參數(shù)說明
--input輸入目錄,包含 JAR 包和依賴
--name應(yīng)用名稱
--main-jar主 JAR 包文件名
--main-class主類(Spring Boot 使用 JarLauncher
--type安裝包類型(msi/exe/dmg/pkg/deb/rpm
--app-version應(yīng)用版本號
--icon應(yīng)用圖標(Windows 用 .ico,macOS 用 .icns
--win-dir-chooser允許用戶選擇安裝目錄
--win-menu創(chuàng)建開始菜單項
--win-shortcut創(chuàng)建桌面快捷方式

4.2 自定義 JRE(使用 jlink)

為了減小安裝包體積,可以使用 jlink 裁剪 JRE,僅包含必要的模塊。

步驟 1:查找應(yīng)用依賴的模塊

jdeps --list-deps target/my-app-1.0.0.jar

輸出示例:

java.base
java.logging
java.sql
java.naming
java.desktop
...

步驟 2:使用 jlink 創(chuàng)建自定義 JRE

jlink \
  --add-modules java.base,java.logging,java.sql,java.naming,java.desktop,java.xml,java.management \
  --output custom-jre \
  --strip-debug \
  --no-header-files \
  --no-man-pages \
  --compress=2

步驟 3:使用自定義 JRE 打包

jpackage \
  --input target \
  --name MySpringBootApp \
  --main-jar my-app-1.0.0.jar \
  --main-class org.springframework.boot.loader.JarLauncher \
  --type msi \
  --runtime-image custom-jre \
  --app-version 1.0.0 \
  --vendor "我的公司"

注意:Spring Boot 應(yīng)用通常依賴較多模塊,建議先不裁剪 JRE,確保功能正常后再優(yōu)化。

五、不同平臺的打包示例

5.1 Windows 平臺(MSI)

jpackage \
  --input target \
  --name MyApp \
  --main-jar my-app-1.0.0.jar \
  --main-class org.springframework.boot.loader.JarLauncher \
  --type msi \
  --app-version 1.0.0 \
  --icon src/main/resources/app.ico \
  --win-dir-chooser \
  --win-menu \
  --win-shortcut \
  --win-menu-group "我的應(yīng)用"

5.2 macOS 平臺(DMG)

jpackage \
  --input target \
  --name MyApp \
  --main-jar my-app-1.0.0.jar \
  --main-class org.springframework.boot.loader.JarLauncher \
  --type dmg \
  --app-version 1.0.0 \
  --icon src/main/resources/app.icns \
  --mac-package-name "com.mycompany.myapp" \
  --mac-package-identifier "com.mycompany.myapp"

5.3 Linux 平臺(DEB)

jpackage \
  --input target \
  --name myapp \
  --main-jar my-app-1.0.0.jar \
  --main-class org.springframework.boot.loader.JarLauncher \
  --type deb \
  --app-version 1.0.0 \
  --icon src/main/resources/app.png \
  --linux-shortcut \
  --linux-menu-group "Development"

六、集成到 Maven 構(gòu)建流程

為了自動化打包流程,可以將 JPackage 命令集成到 Maven 的 pom.xml 中。

6.1 使用 exec-maven-plugin

pom.xml 中添加以下插件配置:

<build>
    <plugins>
        <!-- Spring Boot Maven 插件 -->
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>

        <!-- JPackage 打包插件 -->
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.1.0</version>
            <executions>
                <execution>
                    <id>jpackage</id>
                    <phase>package</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>jpackage</executable>
                        <arguments>
                            <argument>--input</argument>
                            <argument>target</argument>
                            <argument>--name</argument>
                            <argument>MySpringBootApp</argument>
                            <argument>--main-jar</argument>
                            <argument>${project.build.finalName}.jar</argument>
                            <argument>--main-class</argument>
                            <argument>org.springframework.boot.loader.JarLauncher</argument>
                            <argument>--type</argument>
                            <argument>msi</argument>
                            <argument>--app-version</argument>
                            <argument>${project.version}</argument>
                            <argument>--vendor</argument>
                            <argument>我的公司</argument>
                            <argument>--win-dir-chooser</argument>
                            <argument>--win-menu</argument>
                            <argument>--win-shortcut</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

6.2 執(zhí)行構(gòu)建

mvn clean package

構(gòu)建完成后,安裝包將生成在項目根目錄下。

七、總結(jié)

JPackage 工具為 Java 應(yīng)用的分發(fā)提供了強大的支持,從簡單的命令行操作到集成到自動化構(gòu)建流程,JPackage 都能很好地滿足需求。

在實際項目中,建議根據(jù)應(yīng)用特點選擇合適的打包策略,平衡安裝包體積、部署便利性和運行性能,為用戶提供最佳的使用體驗。

以上就是基于SpringBoot+JPackage構(gòu)建獨立安裝包的操作流程的詳細內(nèi)容,更多關(guān)于SpringBoot JPackage構(gòu)建獨立安裝包的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Springboot 跨域配置無效及接口訪問報錯的解決方法

    Springboot 跨域配置無效及接口訪問報錯的解決方法

    這篇文章主要介紹了Springboot 跨域配置無效及接口訪問報錯的解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • linux用java -jar啟動jar包緩慢的問題

    linux用java -jar啟動jar包緩慢的問題

    這篇文章主要介紹了linux用java -jar啟動jar包緩慢的問題,具有很好的參考價值,希望對大家有所幫助,
    2023-09-09
  • java對double數(shù)組排序示例分享

    java對double數(shù)組排序示例分享

    這篇文章主要介紹了java對double數(shù)組排序示例,代碼簡單,下面我們直接上代碼,需要的朋友可以參考下
    2014-03-03
  • 一文看懂RabbitMQ消息丟失如何防止

    一文看懂RabbitMQ消息丟失如何防止

    這篇文章主要介紹了RabbitMQ消息丟失的場景,以及如何保證信息不丟失,看完這篇文章一定可以幫助你RabbitMQ有更深的理解,需要的朋友可以參考下
    2023-03-03
  • Spring Cloud Gateway入門解讀

    Spring Cloud Gateway入門解讀

    本篇文章主要介紹了Spring Cloud Gateway入門解讀,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • ?java簡介及環(huán)境搭建

    ?java簡介及環(huán)境搭建

    這篇文章主要介紹了java簡介及環(huán)境搭建,文章主要介紹Java的發(fā)展史及環(huán)境搭建,對正在學(xué)Java的你有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • 解決Maven的pom.xml中設(shè)置repository不起作用問題

    解決Maven的pom.xml中設(shè)置repository不起作用問題

    這篇文章主要介紹了解決Maven的pom.xml中設(shè)置repository不起作用問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • SpringBoot整合Shiro兩種方式(總結(jié))

    SpringBoot整合Shiro兩種方式(總結(jié))

    這篇文章主要介紹了SpringBoot整合Shiro兩種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • JSON--List集合轉(zhuǎn)換成JSON對象詳解

    JSON--List集合轉(zhuǎn)換成JSON對象詳解

    這篇文章主要介紹了List集合轉(zhuǎn)換成JSON對象,小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。
    2017-01-01
  • Java中MessageDigest來實現(xiàn)數(shù)據(jù)加密的方法

    Java中MessageDigest來實現(xiàn)數(shù)據(jù)加密的方法

    這篇文章主要介紹了Java中MessageDigest來實現(xiàn)數(shù)據(jù)加密的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05

最新評論

法库县| 虹口区| 扬州市| 射洪县| 昌平区| 凌云县| 永济市| 郁南县| 视频| 南木林县| 南木林县| 辰溪县| 福州市| 廊坊市| 海丰县| 巴林左旗| 于田县| 岳阳市| 宣威市| 青海省| 合作市| 苗栗县| 开江县| 丘北县| 且末县| 昌都县| 克拉玛依市| 尼木县| 栖霞市| 黔西县| 新民市| 博野县| 巴楚县| 临邑县| 河北区| 大埔县| 同江市| 雷州市| 繁峙县| 永善县| 石楼县|