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

时间:2016-08-12 18:42:03

标签: java gradle jar executable init.d

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

我有一个应用程序" myapp.jar"需要参数" - 演示模式"。我使用gradle应用程序distTar和distZip插件将它变成一个带有自己脚本的可执行jar(所以我可以直接运行它作为" ./ myapp.jar")。

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

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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

请注意,脚本会将其所有参数传递给基础$ {mainClassName}。