Java 在gradle可执行jar文件中包含运行时参数

Java 在gradle可执行jar文件中包含运行时参数,java,gradle,jar,executable,init.d,Java,Gradle,Jar,Executable,Init.d,经过多次搜索,我发现如何在build.gradle文件中包含运行时参数,以便从gradle运行可执行jar,甚至如何包含JVM参数,但我没有找到这个问题的答案: 我有一个应用程序“myapp.jar”,它接受一个参数--“演示模式”。我正在使用gradle应用程序distTar和distZip插件将其制作成一个带有自己脚本的可执行jar(因此我可以直接以“/myapp.jar”的形式运行它) 我需要将这个jar添加到/etc/init.d中,我只需将jar文件符号链接到init.d目录(并运行u

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

我有一个应用程序“myapp.jar”,它接受一个参数--“演示模式”。我正在使用gradle应用程序distTar和distZip插件将其制作成一个带有自己脚本的可执行jar(因此我可以直接以“/myapp.jar”的形式运行它)

我需要将这个jar添加到/etc/init.d中,我只需将jar文件符号链接到init.d目录(并运行updaterc.d)即可

现在,当我启动系统时,没有--demo mode参数,应用程序运行得很好,正如我所希望的那样(即不使用demo mode时)

我还可以进入应用程序所有者的主目录,设置RUN_ARGS=“--demo mode”并运行“./myapp.jar”,它将在demo模式下启动。酷。(查看jar内部的默认gradle生成的构建脚本,可以发现$RUN_ARGS包含在实际执行jar的命令中的jar文件名之后)

我似乎不能让/etc/init.d使用内置的Gradle启动脚本并应用--demo模式参数来启动jar文件

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

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

我甚至尝试在jar owner的.bashrc中导出RUN_ARGS,希望在脚本运行时能够得到它…(没有乐趣)


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

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

这些是最终启动应用程序的特定于操作系统的shell SCRP。您可以附加参数

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

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

您使用的是哪个版本的Gradle,或者它是否重要?版本2.14,我不知道它是否重要:)