如何将 picocli groovy-grape 脚本转换为本机独立应用程序?
How to convert picocli groovy-grape script to native standalone app?
我用 picocli 制作了我的第一个 groovy CLI 应用程序。现在,我希望它可以在客户端机器上没有安装任何 JVM 的情况下使用,也许使用 GraalVM。
这是一个开源项目:
https://github.com/kchaitanya863/db2csv
另一个简单的选择是将您的脚本 docker 化(阅读此博客了解如何操作 https://groovy-lang.gitlab.io/101-scripts/docker/basico-en.html)
如果您想构建 linux 可执行文件,您需要更改项目:
转换为gradle项目(maven也是一个选项,但gradle有很多插件)
将您的脚本更改为带有典型主程序的 class(并将其移动到标准目录 src/main/groovy/mypackage)
给你添加一些任务build.gradle类似于这些https://gitlab.com/snippets/1797638
如果您想将 Graal 与 Groovy 一起使用,请查看这篇文章:
https://e.printstacktrace.blog/graalvm-and-groovy-how-to-start/
您将需要:
- 静态编译您的 groovy 脚本
- 使用
静态编译后使args
变量可用
final String[] args = getProperty("args") as String[]
- 使用 Groovy (this may be useful)
的反射动态地为 类 指定一个反射配置文件 loaded/invoked
- 使用 picocli 反射为 类 loaded/invoked 指定一个反射配置文件。
picocli-codegen
模块provides一个picocli.codegen.aot.graalvm.ReflectionConfigGenerator
生成配置文件的工具。
- 如果您的脚本有任何
@Grape
依赖项,您可能需要使用 -Dgroovy.grape.enabled=false
关闭 Grape 依赖项管理器,然后手动将所有依赖项添加到类路径中
致谢:我从 Szymon Stepniak
的 this article 那里获得了大部分技巧
我用 picocli 制作了我的第一个 groovy CLI 应用程序。现在,我希望它可以在客户端机器上没有安装任何 JVM 的情况下使用,也许使用 GraalVM。 这是一个开源项目: https://github.com/kchaitanya863/db2csv
另一个简单的选择是将您的脚本 docker 化(阅读此博客了解如何操作 https://groovy-lang.gitlab.io/101-scripts/docker/basico-en.html)
如果您想构建 linux 可执行文件,您需要更改项目:
转换为gradle项目(maven也是一个选项,但gradle有很多插件)
将您的脚本更改为带有典型主程序的 class(并将其移动到标准目录 src/main/groovy/mypackage)
给你添加一些任务build.gradle类似于这些https://gitlab.com/snippets/1797638
如果您想将 Graal 与 Groovy 一起使用,请查看这篇文章: https://e.printstacktrace.blog/graalvm-and-groovy-how-to-start/
您将需要:
- 静态编译您的 groovy 脚本
- 使用 静态编译后使
args
变量可用
final String[] args = getProperty("args") as String[]
- 使用 Groovy (this may be useful) 的反射动态地为 类 指定一个反射配置文件 loaded/invoked
- 使用 picocli 反射为 类 loaded/invoked 指定一个反射配置文件。
picocli-codegen
模块provides一个picocli.codegen.aot.graalvm.ReflectionConfigGenerator
生成配置文件的工具。 - 如果您的脚本有任何
@Grape
依赖项,您可能需要使用-Dgroovy.grape.enabled=false
关闭 Grape 依赖项管理器,然后手动将所有依赖项添加到类路径中
致谢:我从 Szymon Stepniak
的 this article 那里获得了大部分技巧