问题标签 [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 投票
1 回答
390 浏览

docker - 使用 centos-quarkus-maven:19.2.1 生成原生镜像 quarkus rest-client-quickstart 失败

堆栈:宿主 os windows10 和 centos-quarkus-maven:19.2.1 容器

  • openjdk 版本“1.8.0_232”
  • OpenJDK 运行时环境(build 1.8.0_232-20191008104205.buildslave.jdk8u-src-tar--b07)
  • OpenJDK 64-Bit GraalVM CE 19.2.1(构建 25.232-b07-jvmci-19.2-b03,混合模式)

    在我克隆了 de rest-client-quickstart repo 并运行后,./mvnw package -Dnative -DskipTests -X 我遇到了这个错误:

PS:JVM模式工作正常

0 投票
1 回答
751 浏览

docker - Quarkus graalvm native build dockerfile 安装失败

我想通过 Dockerfile 部署一个 quarkus 构建器映像。我们在代理后面,我将所有 linux 代理设置都设置为大写和小写。

如果我运行 Dockerfile,我会在 gu 命令安装本机映像组件时收到一条错误消息。这是 Dockerfile 中完整的运行语句:

它返回一条错误消息,其中包含我必须设置一个 http_proxy。在该运行语句之前,我启动了一个 printenv 语句,我可以看到 http_proxy 环境变量已设置。
在 dockerfile 的那一部分之前和之后,我们下载并安装其他东西。这样可行。

唯一不起作用的是 gu 语句。

这是返回的日志消息:

0 投票
2 回答
975 浏览

java - 构建和运行时初始化中的 Quarkus 原生构建类

我有一个第 3 方类,它被 Quarkus 添加到构建时间初始化中,但由于静态线程使用,它需要运行时初始化。当将它添加到运行时初始化本机构建时,会抱怨它在两者中。

重新生成此内容的示例项目:https ://github.com/hshorter/quarkus-avro-decode-example

使用“--initialize-at-run-time=org.apache.avro.specific.SpecificDatumReader”:

错误:应该在运行时初始化的类在图像构建期间被初始化:org.apache.avro.specific.SpecificDatumReader 请求在构建时初始化类(从命令行)。要查看 org.apache.avro.specific.SpecificDatumReader 被初始化的原因,请使用 -H:+TraceClassInitialization

没有“--initialize-at-run-time=org.apache.avro.specific.SpecificDatumReader”:

错误:在图像堆中检测到一个已启动的线程。在图像生成器中运行的线程不再在图像运行时运行。要查看这个对象是如何被实例化的,请使用 -H:+TraceClassInitialization。该对象可能是由类初始化程序创建的,并且可以从静态字段访问。您可以使用选项 --initialize-at-build-time= 在映像运行时请求类初始化。或者您可以编写自己的初始化方法并从主入口点显式调用它们。详细信息:Trace: object org.apache.avro.specific.SpecificDatumReader

非常感谢任何帮助。

0 投票
1 回答
206 浏览

java - micronaut - java.lang.IllegalAccessError graalvm 本机编译外部依赖

我正在尝试在 micronaut 服务中使用自定义外部库(aws lambda 通过 api 网关和 graalvm 本机编译)

我的库中有一些类需要杰克逊在反序列化期间使用。因此,我将我的类添加到@Introspected单独配置类中的注释中(如文档https://docs.micronaut.io/latest/guide/index.html#_use_the_code_introspected_code_annotation_on_a_configuration_class中所述)

当我运行本机编译时出现错误Error loading a referenced type: java.lang.IllegalAccessError: tried to access class antessio.$Kanye$Introspection from class micronaut.htt.service.$CoreLibBeanInstrospectionConfig$IntrospectionRef0

为了重现这个问题,我创建了一个小项目:https ://github.com/antessio/micronaut-bean-introspection 。

我还缺少任何其他配置或设置吗?

注:环境配置

JDK 1.8

微航 1.2.8

graalvm 19.2.1

0 投票
2 回答
1000 浏览

graalvm - Graalvm 工具:未找到本机图像配置

该链接描述了该工具的使用native-image-configure https://github.com/oracle/graal/blob/master/substratevm/CONFIGURE.md

我无法在 JDK11 的 Graalvm 版本 19.0.3.2 中找到此工具

我在哪里可以得到这个工具?

0 投票
1 回答
2385 浏览

java - 对于开发人员,GraalVM 19.3 的 CE 和 EE 版本有什么区别?

随着最近发布的 GraalVM 19.3,它添加了对 Java 11 的支持,这让我们再次看到它很有趣。Oracle 有两个版本,免费社区版和非免费企业版是可以理解的,但对于两者之间的实际区别是什么,他们非常模糊。

常见问题解答说:

Oracle GraalVM 企业版和 GraalVM 社区版有什么区别?GraalVM Enterprise 有几个关键的进步,使其成为企业优于 GraalVM 社区的首选产品,包括:

  • 通过更高的峰值性能和更低的内存占用来提高效率,从而降低您的基础架构成本并缩短应用程序响应时间
  • 改进的安全功能以保护所有语言的应用程序
  • 企业支持 24x7x365 让您高枕无忧,您的环境由全球 GraalVM 专家提供支持

最后一个要点对于那些需要支持关键任务应用程序的人来说是可以理解的,但我发现前两个相当模糊。

因此,我想听听那些实际使用过 GraalVM 的人的意见,是否可以很容易地总结这些差异——特别是如果得到“这对我们有什么好处”数据的支持——让开发人员了解企业版会给我们带来什么。特别是从 docker/kubernetes 上的原生镜像来看,我们目前的主要用例是基于 Java 的微服务(目前基于 Spring Boot,但微配置文件 WAR 方法很有趣,可以摆脱运行时的脆弱性)。

0 投票
1 回答
1373 浏览

java - Graal 编译的 JavaFX 应用程序中的 java.lang.ClassNotFoundException

我正在开发一个可以编译为本机应用程序的小型 OpenJFX 项目。以下是源代码相关部分的示例:

Main.java

App.java

pom.xml

该项目成功编译成两个 .jar 文件和一个本机二进制文件(在这种特定情况下,一个 Linux x86_64 Glibc ELF 二进制文件)。非独立的 .jar(后来由 GraalVM 编译)使用 .jar 成功执行java --module-path /usr/share/openjfx/lib --add-modules javafx.controls,javafx.fxml -jar target/app-1.0-SNAPSHOT.jar。但是,target/app从终端启动的生成的本机二进制文件会出现以下错误:

我做错了什么,GraalVM 端是否存在某种静默编译错误或缺少参数?

0 投票
1 回答
601 浏览

java - 编译为本机映像的 SparkJava 不起作用

我正在尝试将基于spark-java的简单 java 应用程序编译为本机映像。该应用程序公开了一个GET /healthcheck始终返回 text/plain: 的端点OK

项目中只有两个依赖:

我通过 GraalVM 运行 fatjar 创建了本机映像配置:

重要的是我正在对端点进行 REST 调用,以确保代理可以检查代码中的必要分支。然后将生成的 *.json 文件放入META-INF/native-image并因此由native-image.

然后我使用 multistage docker build 编译 fatjar 并将 jar 编译为本机镜像:

当通过以下方式触发 docker 构建时:

一切看起来都很好 - 图像已创建,并且在启动控制台时不会报告任何问题:

但是,当我尝试访问端点时,它不起作用:

有人知道我在做什么错吗?

演示该问题的存储库中的提交:https ://github.com/xmcax/javaspark-native/tree/f5636ed39c63e35861840998a21a0b79bf4ff996

0 投票
1 回答
414 浏览

java - 原生映像何时以及为何需要 SubstrateVM 框架?

我阅读了有关GraalVMSubstrateVM框架的信息。我了解该native-image命令可用于从 Java 源文件创建本机应用程序,如下所示:

这将创建一个本机二进制文件hello,根据这个问题,它由 SubstrateVM 框架提供支持,该框架提供......

...其他东西(运行时)需要在没有 JVM 的情况下实际运行提前编译的 Java 字节码。

我不清楚:

  • 何时以及为何需要 SubstrateVM 框架?仅在本机构建时需要还是在运行时也需要?二进制hello文件是由纯目标机器字节码组成,还是仍然存在 Java 字节码和嵌入的成熟虚拟机,即 SubstrateVM?
  • 与通常的C 程序hello相比,哪些开销需要运行本机映像?Hello World!
0 投票
3 回答
4134 浏览

macos-catalina - 无法在 OS X Catalina 中使用 GRAALVM 生成本机图像

我无法在 Catalina 10.15.2 中运行命令:

它返回我这条消息:

我试过跑步

在哪里

没有运气。我无法运行该命令,因此无法成功运行该命令

mvn install -Pnative.

[粘贴箱][1]

我已经读过这个 [thread][2],对我没有用。

请帮忙

更新

好的,我已经应用了这个建议,现在我可以创建 native-image,但是当我尝试运行 mvn install -Pnative 时出现一个错误:

更新 2

根据 Viktor 的建议,我更改了 GRAALVM_HOME:

看来我必须降级到 GRAALVM 19.2.1 ...

谢谢你们的帮助。我将看到如何使用 brew 降级到所需的版本...