【问题标题】:Include run-time args in gradle executable jar file在 gradle 可执行 jar 文件中包含运行时参数
【发布时间】:2016-08-12 18:42:02
【问题描述】:

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

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

我需要将此 jar 添加到 /etc/init.d,我只需将 jar 文件符号链接到 init.d 目录(并运行 update-rc.d)即可完成。

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

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

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

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

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

我什至尝试在 jar-owner 的 .bashrc 中导出 RUN_ARGS,希望它会在脚本运行时被拾取...(不高兴)

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

【问题讨论】:

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

标签: java gradle jar executable init.d


【解决方案1】:

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

这些是最终启动应用程序的操作系统特定的 shell 脚本。你可以附加你的论点。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2011-09-18
    • 2016-12-05
    • 2014-11-10
    • 2014-10-05
    • 1970-01-01
    • 2017-07-04
    相关资源
    最近更新 更多