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

如何在运行distTar生成的Java应用时传递系统属性?

Gradle distTar生成的启动脚本无法传递JVM参数的解决方法

问题原因

直接运行my_application -Dfoo=bar时,启动脚本会将-Dfoo=bar识别为应用程序的普通命令行参数,而不是传递给JVM的参数,因此你的Java应用无法通过System.getProperty()获取到该值。

解决方法

方法1:通过环境变量传递JVM参数

使用JAVA_OPTS环境变量设置JVM参数,启动脚本会自动将该变量中的参数传递给JVM:

JAVA_OPTS="-Dfoo=bar" my_application-1.0/bin/my_application

方法2:使用脚本的--jvm-opts选项(部分脚本支持)

部分Gradle生成的启动脚本支持通过--jvm-opts参数直接指定JVM参数:

my_application-1.0/bin/my_application --jvm-opts="-Dfoo=bar"

方法3:修改Gradle配置自定义启动脚本

如果需要让脚本默认支持直接传递JVM参数,或者添加默认参数,可以在build.gradle中配置:

plugins {
    id 'application'
}

application {
    mainClass = '你的主类全路径'
    // 配置默认JVM参数(可选)
    jvmArgs = ['-DdefaultProp=value']
}

// 调整启动脚本的参数处理逻辑,让脚本接受命令行中的JVM参数
tasks.named('startScripts') {
    // 针对Unix脚本修改,让命令行参数作为JVM参数传递
    def scriptContent = unixScript.text
    unixScript.text = scriptContent.replace(
        'DEFAULT_JVM_OPTS=""',
        'DEFAULT_JVM_OPTS="$@"'
    )
    // Windows脚本可同理调整windowsScript.text内容
}

修改后重新执行./gradlew distTar,生成的新脚本就能直接接受-D类的JVM参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:55:23