java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot JPackage构建独立安装包

基于SpringBoot+JPackage构建独立安装包的操作流程

作者:风象南

从JDK 14开始,Java官方引入了JPackage工具(在JDK 16 正式成为标准功能),它能够将 Java 应用打包成特定平台的原生安装包,本文将介绍如何使用 JPackage 工具将 Spring Boot 项目打包成 Windows、macOS 或 Linux 平台的原生安装包,需要的朋友可以参考下

前言

从 JDK 14 开始,Java 官方引入了 JPackage 工具(在 JDK 16 正式成为标准功能),它能够将 Java 应用打包成特定平台的原生安装包,自带定制化的 JRE 运行环境。这意味着用户无需提前安装 Java 环境,双击安装包即可完成应用部署,极大地简化了交付流程。

本文将介绍如何使用 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,仅打包应用所需的模块,大幅减小安装包体积

简化部署:用户无需预装 Java 环境,安装包自带运行时

1.2 JPackage 的优势

传统部署方式JPackage 方式
需要预装 JRE/JDK自带 JRE,无需额外安装
环境版本可能不匹配绑定特定 JRE 版本,环境一致
手动编写启动脚本自动生成启动器
跨平台需要多套脚本一键生成各平台安装包

二、环境准备

2.1 JDK 版本要求

推荐使用 JDK 17 或更高版本(JPackage 在 JDK 16 才成为标准功能,JDK 17 是 LTS 版本)

确认 JPackage 可用:

jpackage --version

2.2 平台特定工具

根据目标操作系统,需要安装对应的打包工具:

Windows

WiX Toolset 3.11+(用于生成 .msi 安装包)
下载地址:wixtoolset.org/
安装后将 bin 目录添加到系统环境变量 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 示例项目结构

假设我们有一个标准的 Spring Boot 项目:

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

3.2 构建可执行 JAR

首先使用 Maven 或 Gradle 构建项目:

# Maven
mvn clean package

# Gradle
gradle clean build

确保生成的 JAR 包是可执行的(Spring Boot 默认打包方式)。

四、使用 JPackage 打包

4.1 基础打包命令

以下是一个基础的 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 的企业级应用" \
  --icon src/main/resources/app-icon.ico \
  --win-dir-chooser \
  --win-menu \
  --win-shortcut

参数说明

参数说明
--input输入目录,包含 JAR 包和依赖
--name应用名称
--main-jar主 JAR 包文件名
--main-class主类(Spring Boot 使用 JarLauncher
--type安装包类型(msi/exe/dmg/pkg/deb/rpm
--app-version应用版本号
--icon应用图标(Windows 用 .ico,macOS 用 .icns
--win-dir-chooser允许用户选择安装目录
--win-menu创建开始菜单项
--win-shortcut创建桌面快捷方式

4.2 自定义 JRE(使用 jlink)

为了减小安装包体积,可以使用 jlink 裁剪 JRE,仅包含必要的模块。

步骤 1:查找应用依赖的模块

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

输出示例:

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

步骤 2:使用 jlink 创建自定义 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 应用通常依赖较多模块,建议先不裁剪 JRE,确保功能正常后再优化。

五、不同平台的打包示例

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 "我的应用"

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 构建流程

为了自动化打包流程,可以将 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 执行构建

mvn clean package

构建完成后,安装包将生成在项目根目录下。

七、总结

JPackage 工具为 Java 应用的分发提供了强大的支持,从简单的命令行操作到集成到自动化构建流程,JPackage 都能很好地满足需求。

在实际项目中,建议根据应用特点选择合适的打包策略,平衡安装包体积、部署便利性和运行性能,为用户提供最佳的使用体验。

以上就是基于SpringBoot+JPackage构建独立安装包的操作流程的详细内容,更多关于SpringBoot JPackage构建独立安装包的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文