В picocli приводятся примеры , как генерировать конфигурации отражений GraalVM во время сборки для Maven и Gradle.
Пример Gradle
configurations {
generateConfig
}
dependencies {
compile 'info.picocli:picocli:3.9.3'
generateConfig 'info.picocli:picocli-codegen:3.9.3'
}
task
task(generateGraalReflectionConfig, dependsOn: 'classes', type: JavaExec) {
main = 'picocli.codegen.aot.graalvm.ReflectionConfigGenerator'
classpath = configurations.generateConfig + sourceSets.main.runtimeClasspath
def outputFile = new File(project.buildDir, 'cli-reflect.json')
args = ["--output=$outputFile", 'com.your.package.YourCommand1', 'com.your.package.YourCommand2']
}
assemble.dependsOn generateGraalReflectionConfig
Как я мог написать что-то эквивалентное для sbt?
Это то, что я получил до сих пор, но я не знаю, иду ли я в правильном направлении.
import Dependencies._
ThisBuild / scalaVersion := "2.12.8"
ThisBuild / version := "0.1.0-SNAPSHOT"
ThisBuild / organization := "com.example"
ThisBuild / organizationName := "example"
lazy val root = (project in file("."))
.settings(
name := "poc-cli",
libraryDependencies += scalaTest % Test,
libraryDependencies += "info.picocli" % "picocli" % "3.9.3",
libraryDependencies += "info.picocli" % "picocli-codegen" % "3.9.3",
)
lazy val graalConfig = inputKey[Unit]("gen-graal-config")
graalConfig:= {
val conf = (runMain in Compile).fullInput(" picocli.codegen.aot.graalvm.ReflectionConfigGenerator --output=cli-reflect.json example.Hello").evaluated
}
enablePlugins(GraalVMNativeImagePlugin)
Edit
В моем первоначальном вопросе у меня был код ниже, с моим текущим кодом проблема решена
lazy val graalConfig = taskKey[Unit]("graal-config") := {
Process("java" :: "-jar" :: "picocli.codegen.aot.graalvm.ReflectionConfigGenerator" :: "--output" :: "cli-reflect.json" :: "???" :: Nil,
baseDirectory.value / "lib").!
}