Как преобразовать скрипт Picocli Groovy-Grape в собственное автономное приложение? - PullRequest
0 голосов
/ 03 марта 2019

У меня есть свое первое отличное приложение CLI с picocli.Теперь я хочу, чтобы он был доступен для использования без какой-либо JVM, установленной на клиентском компьютере, возможно, с использованием GraalVM.Это для проекта с открытым исходным кодом: https://github.com/kchaitanya863/db2csv

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Если вы хотите использовать Graal с Groovy, прочитайте эту статью: https://e.printstacktrace.blog/graalvm-and-groovy-how-to-start/

0 голосов
/ 04 марта 2019

Вам понадобится:

  • статически скомпилировать ваш скрипт groovy
  • сделать переменную args доступной после статической компиляции с
final String[] args = getProperty("args") as String[]
  • укажите файл конфигурации отражения для классов, динамически загружаемых / вызываемых с помощью отражения Groovy ( это может быть полезно )
  • задайте файл конфигурации отражения для классов, загружаемых / вызываемых с помощьюотражение от picocli.Модуль picocli-codegen предоставляет picocli.codegen.aot.graalvm.ReflectionConfigGenerator инструмент для создания файла конфигурации.
  • Если в вашем скрипте есть какие-либо зависимости @Grape, вам может потребоваться отключить менеджер зависимостей Grape с помощью-Dgroovy.grape.enabled=false и вместо этого вручную добавьте все зависимости в classpath

Кредит: большинство этих советов я получил из этой статьи от Szymon Stepniak

0 голосов
/ 03 марта 2019

Еще один простой способ - докернизировать ваш скрипт (о том, как это сделать, читайте в этом блоге https://groovy -lang.gitlab.io / 101-scripts / docker / basico-en.html )

Если вы хотите создать исполняемый файл linux, вам нужно изменить свой проект:

  • преобразовать в проект gradle (также доступен вариант maven, но у gradle много плагинов)

  • изменить ваш сценарий на класс с типичной основной (и переместить его в стандартный каталог src / main / groovy / mypackage)

  • добавьте некоторые задачи в ваш build.gradle, подобные этим https://gitlab.com/snippets/1797638

...