You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Gradle将对应版本JRE打包到发行包并修改启动脚本使用内置JRE

Gradle 内置JRE并修改启动脚本配置方案

第一步:配置JRE拷贝逻辑

在你的build.gradle(Groovy DSL)中添加如下配置,将指定的Java 16 JRE打包到发行包中:

plugins {
    id 'java'
    id 'application'
}

// 替换为你的服务主类全限定名
mainClassName = 'com.example.YourServiceMain'

// 替换为你本地Java 16 JRE的实际存放路径,也可配置为自动下载对应平台JRE
def targetJrePath = file("/home/yourname/env/jdk16/jre")

distributions {
    main {
        contents {
            // 将JRE拷贝到发行包的jre目录下,installDist任务会自动同步到build/install/[服务名]/jre
            from(targetJrePath) {
                into "jre"
                // Linux环境可添加权限配置,避免执行权限不足
                fileMode 0755
                dirMode 0755
            }
        }
    }
}

第二步:自定义启动脚本,优先使用内置JRE

修改startScripts任务的生成逻辑,替换默认的JAVA_HOME查找规则:

startScripts {
    doLast {
        // 修改Unix平台启动脚本
        unixScript.text = unixScript.text.replace(
            '#!/usr/bin/env sh',
            '''#!/usr/bin/env sh
# 定位服务安装根目录
APP_HOME=`cd "$(dirname "$0")/.." && pwd`
# 强制使用内置JRE,覆盖系统JAVA_HOME
JAVA_HOME="$APP_HOME/jre"
export JAVA_HOME
'''
        )

        // 无需Windows版本可删除以下Windows脚本修改逻辑
        windowsScript.text = windowsScript.text.replace(
            '@if "%DEBUG%" == "" @echo off',
            '''@if "%DEBUG%" == "" @echo off
set APP_HOME=%~dp0..
set JAVA_HOME=%APP_HOME%\\jre
'''
        )
    }
}

验证效果

执行./gradlew installDist命令后:

  • build/install/[你的服务名]/jre目录下会完整拷贝你指定的Java 16 JRE
  • build/install/[你的服务名]/bin下的启动脚本会直接调用内置JRE启动服务,完全不依赖系统全局的JAVA_HOME变量

如果需要自动适配不同操作系统下载对应版本JRE,可使用gradle-jdks插件完成自动化配置,无需手动维护本地JRE文件。

内容的提问来源于stack exchange,提问作者Amen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:54:05