如何在运行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
相关产品推荐
相关产品推荐

