问题标签 [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.
java - Microprofile @Fallback 在本机图像模式下不起作用
在 Quarkus 上运行以下代码:
回退机制在常规 JDK 模式下正常工作。另一方面,在本机图像模式下,@Fallback
注释不被尊重,并且在 API 调用不成功后引发异常。@RegisterForReflection
如果注释到位,可能是什么原因?
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 中与本机图像编译一起使用来调度任务?
quarkus - 构建 graalvm 可执行文件时是否有用于 H:+TraceClassInitialization 的 pom.xml 选项?
我正在通过运行构建本机 GraalVM 本机映像:
这会引发错误:
我可以看到native-image
它尝试运行的命令:
所以我想我可以添加-H:+TraceClassInitialization
错误,但是当我在native-image
有或没有跟踪选项的情况下运行时,我会得到一个不同的错误:
我不确定是否相关。我猜想通过 maven 运行会设置一些上下文,并且想知道pom.xml
文件上是否有我可以设置要求的属性-H:+TraceClassInitialization
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 上执行来重现该错误。
java - graalVM native-image 是否支持 Javax.ImageIO?
我正在使用多种不同的 Java 功能测试 graalVM 本机图像限制。我编写了一个小程序来执行精巧的边缘检测,并使用 javax.ImageIO 类加载图像。代码可以很好地编译为本机映像,但是在将代码作为本机映像运行时出现以下运行时错误:
这是由以下代码行引起的:
我试图在我的 jni-config.json 文件中指定 JpegImageReader:
但是我仍然得到与以前相同的错误。有谁知道 graalvm 本机映像是否可以支持 ImageIO,如果它不支持为什么不呢?
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
docker - 将多阶段 Dockerfile 迁移到 bazel
我有这个 Dockerfile:
这很简单。在第一阶段,它从 jar 中创建一个本地图像,在第二阶段,它使用一个微小的 alpine 图像来运行该二进制文件。我想将其迁移到 bazel。
我在我的工作区中拉两个基地,如下所示:
在此之后,我不确定将第一个图像与 a 一起使用java_library
并将结果注入第二个图像以生成结果图像。
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/get
RestClient
虽然它工作正常,但当我尝试生成本机图像时它失败了:
如果我按照Quarkus 指南中有关此错误的说明,在 pom 中添加其他构建参数,它仍然会失败:
当RestClient
被定义为@ApplicationScoped
组件时会出现问题。如果我更改它以使其实例化,则本机图像生成没有任何问题:
问题是如何将其定义RestClient
为@ApplicationScoped
组件并能够生成本机图像?
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,但这会导致其他错误。
任何人有任何想法让这个工作?
quarkus - 我们如何在性能测试期间监控 GraalVM 原生镜像的内存、线程、CPU 等?
我想对 Quarkus 原生镜像进行一些性能测试。在传统的 Java 应用程序中,我会使用 VisualVM 连接到应用程序并监控其内存(年轻一代、老一代等)、CPU 使用率、线程等。
由于本机映像现在是操作系统进程,有没有办法获得与 VisualVM 相同的进程洞察信息,或者我们应该坚持操作系统信息(CPU 使用率 + 内存)