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

标签 java gradle jar executable init.d

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

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

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

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

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

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

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

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

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

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

最佳答案

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

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

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

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

关于java - 在 gradle 可执行 jar 文件中包含运行时参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38924533/

相关文章:

exception - 与其他库一起创建库 jar

jar - sbt 程序集创建的程序集文件中缺少类

java - Android内存使用和对象引用

javascript - 必需的字符串参数 'text' 不存在

java - JBOSS 服务器 5.0.1.GA 上的部署问题

android - 错误 : unknown tag <:string> in my app

android - Gradle 设置 : Invalid variable name. 必须以字母开头,但是:

java - mustache :如何在 Java 中创建自定义辅助函数

spring - 找不到mainClassName,不需要

java - 压缩提取的 Jar 文件