首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于picocli梯度反射生成的Sbt任务?

用于picocli梯度反射生成的Sbt任务?
EN

Stack Overflow用户
提问于 2019-02-14 13:13:57
回答 2查看 256关注 0票数 2

在picocli中,他们给出了多么上的示例,以便在Maven和Gradle构建过程中生成GraalVM反射配置。

分级实例

代码语言:javascript
复制
configurations {
    generateConfig
}
dependencies {
    compile 'info.picocli:picocli:3.9.3'
    generateConfig 'info.picocli:picocli-codegen:3.9.3'
}

任务

代码语言:javascript
复制
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写一些类似的东西呢?

到目前为止,这就是我所得到的,但我不知道我是否朝着正确的方向前进。

代码语言:javascript
复制
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)

编辑

在我最初的问题中,我有下面的代码,用我当前的代码,问题就解决了。

代码语言:javascript
复制
lazy val graalConfig = taskKey[Unit]("graal-config") := {
    Process("java" :: "-jar" :: "picocli.codegen.aot.graalvm.ReflectionConfigGenerator" :: "--output" :: "cli-reflect.json" :: "???" :: Nil,
        baseDirectory.value / "lib").!
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-18 11:54:43

解决办法是

代码语言:javascript
复制
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")

graalVMNativeImageOptions += "-H:ReflectionConfigurationFiles=../cli-reflect.json"

graalConfig:= {
    (runMain in Compile).fullInput(" picocli.codegen.aot.graalvm.ReflectionConfigGenerator -o=target/cli-reflect.json example.Hello").evaluated
}

enablePlugins(GraalVMNativeImagePlugin)

我就可以跑了:

代码语言:javascript
复制
$ sbt graalConfig
$ sbt graalvm-native-image:packageBin 
票数 2
EN

Stack Overflow用户

发布于 2019-12-01 15:43:07

picocli码原修复picocli项目反射。

还有Graal反射组态发生器,它为我自动生成reflection.json并将其附加到生成的jar中,只需将它添加到Graal反射组态发生器的依赖项中,并对类进行注释,还支持包扫描

这样,您可以在需要时轻松地生成反射配置。如何配置和使用它的示例片段。

build.gradle

代码语言:javascript
复制
dependencies {
  compileOnly("com.mageddo.nativeimage:reflection-config-generator:2.1.1")
  annotationProcessor("com.mageddo.nativeimage:reflection-config-generator:2.1.1")
}

Config.java

代码语言:javascript
复制
@Reflection(declaredConstructors = true, scanPackage = "com.github.vo")
public class Config {}

还支持Maven和vanilla java,有关更多详细信息,请检查GRCG文档,也可以查看这篇文章讨论该工具。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54691293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档