问题标签 [graalvm-native-image]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
132 浏览

java - Microprofile @Fallback 在本机图像模式下不起作用

在 Quarkus 上运行以下代码:

回退机制在常规 JDK​​ 模式下正常工作。另一方面,在本机图像模式下,@Fallback注释不被尊重,并且在 API 调用不成功后引发异常。@RegisterForReflection如果注释到位,可能是什么原因?

0 投票
2 回答
778 浏览

java - 与 GraalVM 的本机图像编译一起使用的 Java 调度程序

我的应用程序位于 Quarkus 框架之上。该应用程序的主要功能 - 用于安排一些任务的简单 REST API(现在它只是将一些消息发布到日志中)。

我使用 Quartz 框架实现的调度功能,通常看起来当应用程序收到 POST 请求以调度新事件时,它会做两件事:

  • 将请求中的实体保存到数据库;
  • 安排在 JSON 日期和时间中提到的 Quartz 作业。

同样对于应用程序刚刚启动的情况,我创建了从数据库中获取所有实体并为它们安排 Quartz 作业的方法。

但是当我尝试使用 GraalVM 为该应用程序构建本机映像时,我遇到了这样的异常:

com.oracle.graal.pointsto.constraints.UnsupportedFeatureException:图像堆中不允许有 sun.security.provider.NativePRNG 的实例,因为此类应在图像运行时初始化。

Google 中的快速搜索在GraalVM Github 存储库中给了我关闭的问题,即 Quartz 使用 RMI 的 ObjID 和运行时初始化。由于 Quartz 不能用于需要 GraalVM 进行本机映像编译的应用程序。

那么 Quarkus 调度器是否提供了在 Java 代码中调度作业的能力(类似于我使用 Quartz 的实现)?在我发现的所有示例和代码片段中,我只能看到在方法上使用 @Scheduled 注释的非常简单的用法(就像在官方指南中一样)。或者,也许有任何其他替代工具可以在 Java 中与本机图像编译一起使用来调度任务?

0 投票
1 回答
443 浏览

quarkus - 构建 graalvm 可执行文件时是否有用于 H:+TraceClassInitialization 的 pom.xml 选项?

我正在通过运行构建本机 GraalVM 本机映像:

这会引发错误:

我可以看到native-image它尝试运行的命令:

所以我想我可以添加-H:+TraceClassInitialization错误,但是当我在native-image有或没有跟踪选项的情况下运行时,我会得到一个不同的错误:

我不确定是否相关。我猜想通过 maven 运行会设置一些上下文,并且想知道pom.xml文件上是否有我可以设置要求的属性-H:+TraceClassInitialization

0 投票
1 回答
902 浏览

java - 使用 Graal 的 native-image:NullPointerException 将 Spigot 工件编译为本机图像

我正在尝试使用 Graal 的原生镜像创建 Spigot 1.15 的原生镜像。我正在使用命令:

但是编译失败并出现 NPE:https ://hasteb.in/qujocavi

我尝试使用--intiialize-at-run-time参数,包括net.minecraft.server.v1_15_R1.IRegistry在构建时避免类初始化,但我得到了同样的错误。

所以我的问题是如何将其编译为本机可执行文件?

native-image -jar spigot-1.15.jar您可以通过在 spigotmc 上新下载的 spigot jar 上执行来重现该错误。

0 投票
0 回答
453 浏览

java - graalVM native-image 是否支持 Javax.ImageIO?

我正在使用多种不同的 Java 功能测试 graalVM 本机图像限制。我编写了一个小程序来执行精巧的边缘检测,并使用 javax.ImageIO 类加载图像。代码可以很好地编译为本机映像,但是在将代码作为本机映像运行时出现以下运行时错误:

这是由以下代码行引起的:

我试图在我的 jni-config.json 文件中指定 JpegImageReader:

但是我仍然得到与以前相同的错误。有谁知道 graalvm 本机映像是否可以支持 ImageIO,如果它不支持为什么不呢?

0 投票
2 回答
4810 浏览

java - 如何使用 GraalVM native-image 修复“尝试避免初始化导致初始化的类”

我正在尝试从一个胖 jar 文件创建一个本机图像

我收到这些错误消息,例如:

错误:应该在运行时初始化的类在图像构建期间被初始化:org.apache.log4j.Level 请求在构建时初始化类(从命令行)。org.apache.log4j.Level 已在没有本地映像初始化工具的情况下进行了初始化,并且无法跟踪堆栈跟踪。尝试避免初始化导致 org.apache.log4j.Level org.slf4j.log4j12.Log4jLoggerAdapter 初始化的类,该类被请求在构建时初始化(从命令行)。org.slf4j.log4j12.Log4jLoggerAdapter 已在没有本机映像初始化工具的情况下进行了初始化,并且无法跟踪堆栈跟踪。尽量避免初始化导致 org.slf4j.log4j12.Log4jLoggerAdapter org.apache.log4j 初始化的类。记录器要求在构建时初始化类(从命令行)。org.apache.log4j.Logger 已在没有本地映像初始化工具的情况下进行了初始化,并且无法跟踪堆栈跟踪。尽量避免初始化导致 org.apache.log4j.Logger 初始化的类

解决问题的方法和方法是avoiding to initialize the class什么?我该如何处理这些消息?

我的 graavlVM 版本是 2.0.0-java11

0 投票
0 回答
307 浏览

docker - 将多阶段 Dockerfile 迁移到 bazel

我有这个 Dockerfile:

这很简单。在第一阶段,它从 jar 中创建一个本地图像,在第二阶段,它使用一个微小的 alpine 图像来运行该二进制文件。我想将其迁移到 bazel。

我在我的工作区中拉两个基地,如下所示:

在此之后,我不确定将第一个图像与 a 一起使用java_library并将结果注入第二个图像以生成结果图像。

0 投票
1 回答
1060 浏览

quarkus - quarkus-rest-client 不能与 @ApplicationScoped bean 一起用于本机图像:堆中不允许 sun.security.provider.NativePRNG 的实例

Github 上提供了重现此问题的示例项目

我正在使用 quarkus-rest-client 从我的 Quarkus 应用程序调用 REST 服务。

ExampleResource提供一个使用http://localhost:8080/echo调用的端点:https://postman-echo.com/getRestClient

虽然它工作正常,但当我尝试生成本机图像时它失败了:

如果我按照Quarkus 指南中有关此错误的说明,在 pom 中添加其他构建参数,它仍然会失败:

RestClient被定义为@ApplicationScoped组件时会出现问题。如果我更改它以使其实例化,则本机图像生成没有任何问题:

问题是如何将其定义RestClient@ApplicationScoped组件并能够生成本机图像?

0 投票
4 回答
1689 浏览

quarkus - Quarkus Graalvm 本机应用程序 ClassNotFoundException com.sun.xml.internal.ws.spi.ProviderImpl

我正在将 Spring Boot 应用程序转换为 Quarkus,作为概念证明。当我构建 Quarkus 应用程序并使用 Java 运行它时,它运行良好,但是当我尝试将它作为本机应用程序运行时,我在内部 sun 类 ( com.sun.xml.internal.ws.spi.ProviderImpl )上得到一个ClassNotFoundException,因为它在 Java 中运行,我希望 Native App 也能正常工作。

我在用着:

  • Quarkus 1.3.0.final
  • 使用 quay.io/quarkus/ubi-quarkus-native-image:19.3.1-java11
  • 其中有 openjdk version "11.0.6" 2020-01-14 OpenJDK Runtime Environment GraalVM CE 19.3.1 (build 11.0.6+9-jvmci-19.3-b07) OpenJDK 64-Bit Server VM GraalVM CE 19.3.1 (build 11.0.6+9-jvmci-19.3-b07, mixed mode, sharing)
  • 使用 gradle 构建
  • 这个项目正在使用 WSDL(插件 no.nils.wsdl2java 0.12)
  • 我在 build.gradle 中添加了以下内容

gradle 构建命令是

./gradlew buildNative -i --stacktrace --docker-build=true -Dquarkus.native.builder-image=quay.io/quarkus/ubi-quarkus-native-image:19.3.1-java11

本机应用程序输出

我从ubi-quarkus-native-image中运行应用程序

在同一个 docker 映像中使用 Java 启动时,它按预期工作

我试过的

  • 谷歌:没有太多出现
  • 我确实发现一些提到添加com.sun.xml.ws:rt:2.3.2,但这会导致其他错误。

任何人有任何想法让这个工作?

0 投票
1 回答
388 浏览

quarkus - 我们如何在性能测试期间监控 GraalVM 原生镜像的内存、线程、CPU 等?

我想对 Quarkus 原生镜像进行一些性能测试。在传统的 Java 应用程序中,我会使用 VisualVM 连接到应用程序并监控其内存(年轻一代、老一代等)、CPU 使用率、线程等。

由于本机映像现在是操作系统进程,有没有办法获得与 VisualVM 相同的进程洞察信息,或者我们应该坚持操作系统信息(CPU 使用率 + 内存)