首页 文章

在gradle可执行jar文件中包含运行时args

提问于
浏览
2

经过多次搜索,在此期间我发现如何在build.gradle文件中包含运行时args以从gradle运行可执行jar,甚至如何包含JVM参数,我找不到这个问题的答案:

我有一个应用程序“myapp.jar”,它接受一个参数“--demo-mode” . 我正在使用gradle应用程序distTar和distZip插件将其转换为具有自己脚本的可执行jar(因此我可以直接将其作为“./myapp.jar”运行) .

我需要将这个jar添加到/etc/init.d,我通过简单地将jar文件符号链接到init.d目录(并运行update-rc.d)来完成 .

现在,当我启动系统时,应用程序运行正常,没有--demo-mode参数,就像我想要的那样(当不使用演示模式时) .

我也可以进入app-owner的主目录,设置RUN_ARGS =“ - demo-mode”并运行“./myapp.jar”,它将以演示模式启动 . 凉 . (在默认的gradle生成的构建脚本中查看jar内部显示$ RUN_ARGS包含在实际执行jar的命令中的jar文件名之后)

我似乎无法做的是/etc/init.d使用内置的Gradle启动脚本和应用的--demo-mode参数启动jar文件 .

我知道我可以为/etc/init.d编写我自己的启动脚本并包含arg“手动”(类似“su - user -c”java -jar /home/user/myapp.jar --demo-mode“ )

我还可以解构jar文件并手动破解启动脚本......

我甚至尝试在jar-owner的.bashrc中导出RUN_ARGS,希望在脚本运行时它会被拾取...(没有快乐)

但有没有办法配置Gradle(或使用其他方法),以便包含的启动脚本还包括我想传递给我的jar的命令行参数?

1 回答

  • 0

    实际上,应用程序插件任务installDist,distZip或distTar将创建启动脚本,{install或distributions archive} / bin / .

    这些是特定于操作系统的shell scrpts,它最终启动了应用程序 . 你可以追加你的论点 .

    ...
    exec "\$JAVACMD" "\${JVM_OPTS[@]}" -classpath "\$CLASSPATH" ${mainClassName} "\$@"
    

    请注意,脚本会将其所有参数传递给基础$ .

相关问题