小编Ton*_*ony的帖子

GraalVM(native-image)无法编译logback依赖项

我正在使用当前版本的社区版:GraalVM/native-image 22.1.0

我的项目依赖于日志框架 logback (版本 1.2.3)

如果我想用 graalVM 编译我的“一体式”jar,本机映像会抱怨:

错误:java.util.concurrent.ExecutionException:com.oracle.graal.pointsto.constraints.UnsupportedFeatureException:映像堆中不允许存在 ch.qos.logback.classic.Logger 的实例,因为此类应在映像运行时初始化。要查看该对象是如何实例化的,请使用 --trace-object-instantiation=ch.qos.logback.classic.Logger。

我尝试了许多不同的设置排列,例如--initialize-at-run-time=\<complete list of logback classes\>--initialize-at-run-time

我尝试使用以下命令生成反射配置文件

java -agentlib:native-image-agent=config-output-dir=META-INF/native-image -jar build/myjar-all.jar

并将其添加到配置文件中

-H:ReflectionConfigurationFiles=reflect-config.json

但没有成功。总是收到与 logback 相关的不同错误消息。

所以我的问题是:

有人之前用 graalvm 成功编译过 logback 吗?

java logback graalvm graalvm-native-image

23
推荐指数
1
解决办法
6681
查看次数

如何定义 gradle 任务依赖项 - 输入输出或 dependentOn?

为了让增量构建支持在 gradle 中正确运行,需要在每个(自定义)任务中定义“输入”和“输出”。

这是一种非常简洁的 gradle 方法来检查任务是否可以因为它是最新的而被跳过。样本:

task myTaskA { 
   def someOutputDir = file("$buildDir/gen")

   // define task outputs (input not required here)
   outputs.dir someOutputDir

   doLast{
      // generate something into the defined output directory
      new File(someOutputDir, "dummy.txt").text = "Gradle sample" 
   }
}

task myTaskB {
   // Input of this task is dependent on the output of myTaskA
   inputs.files myTaskA

   doLast{
      // do something
   }
}
Run Code Online (Sandbox Code Playgroud)

是的,这非常好,另外好处是,我们不需要在任务“myTaskB”中声明显式依赖指令(dependsOn)。

dependsOn myTaskA 
Run Code Online (Sandbox Code Playgroud)

该指令不是必需的,因为我们有由输入声明定义的隐式依赖项。

我认为在自定义任务中始终提供输入/输出定义以支持增量构建是一种很好的风格。

但是:这也意味着我们可以完全忽略 dependentOn。

SO:我们什么时候应该dependsOn选择inputs/outputs

也许如果没有输入或输出。是的,但是还有其他可以想到的用例吗?我一直在使用dependsOn,而这对我来说现在已经过时了。你怎么认为?

build gradle incremental-build build.gradle

5
推荐指数
0
解决办法
3166
查看次数