问题标签 [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 回答
342 浏览

spring-boot - 构建 graalvm native-image 为 spring-boot 制作 fat jar 时出现“No access hint found for import selector”错误

参考博客:https ://blog.codecentric.de/en/2020/06/spring-boot-graalvm-native-image-maven-plugin/

以下是我的应用程序版本信息

  • Spring Boot 版本:2.3.3.RELEASE
  • spring-graalvm-native 版本:0.7.0
  • native-image-maven-plugin 版本:20.1.0

本机图像命令

使用上述命令执行时,会出现以下错误。

我该如何解决?我寻求帮助。

0 投票
1 回答
1236 浏览

java - GraalVM native-image 如何从 Jar 中读取资源文件

我有一个 jar 文件,其中包含一些文本文件,我正在尝试将文件加载为:

InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);

它不起作用,因为错误显示:

如果我尝试将资源文件提取到 classpath src/main/resources,那么它工作正常。

我的问题是,我们可以从 Jar 中读取资源文件吗(在GraalVM本机映像中运行时)?有很多第三方 Java 库正在读取捆绑在同一个 Jar 中的资源文件,我们如何克服这个问题?

PS更新:

这确实是我的错误,与class.getResource()and混淆了class.getClassLoader().getResource()。一个在开始时需要斜线,另一个不允许。一旦我删除了path变量中的斜线,它就可以正常工作了。

0 投票
1 回答
498 浏览

java - GraalVM 如何在原生镜像中整合资源文件

基于

默认情况下,原生镜像构建器不会将镜像构建期间类路径中的任何资源集成到它创建的镜像中。要使诸如 Class.getResource()、Class.getResourceAsStream()(或相应的 ClassLoader 方法)之类的调用返回特定资源(而不是 null),需要明确指定应该在图像运行时访问的资源。

这解释了如何通过getResource(). 我有一个用例,我需要在 iOS 的 WebView 中加载资源文件,所以基本上我试试这个:

这些url.toString(),都不会在本机图像url.toExternalFormurl.getPath()返回有效的可加载路径,它们的值要么是resource:demo/index.html要么file://demo/index.html

有谁知道如何在本机映像中管理资源文件?它们是否在单个二进制文件中合并?无论如何,我们是否能够通过文件协议定位资源文件?

0 投票
0 回答
440 浏览

java - Quarkus 使用 Mandrel 原生构建

我正在尝试使用 Mandrel 在本机模式下构建 Quarkus,如下所述:https ://quarkus.io/guides/building-native-image#container-runtime

由于我的 CI 管道的限制,我需要使用多阶段 docker-build 手动执行此操作:https ://quarkus.io/guides/building-native-image#using-a-multi-stage-docker-建造

但是现在我不知道要更改什么Dockerfile,如果我想使用 Mandrel-image:

我敢肯定它一定很简单,但我现在不明白。有什么建议么?

0 投票
1 回答
1032 浏览

quarkus - 无法构建可执行文件(GraalVM / Quarkus):可以访问不受支持的方法 java.lang.Class.getNestHost()

我有一个用 Java 11 编写的小型 Quarkus webapp。它使用 hibernate-orm 扩展连接到 Postgres DB 并执行基本的 CRUD 操作。应用程序在 JVM 上运行良好,但容器中的本机映像构建器失败。我试过同时使用默认的builder-imagequay.io/quarkus/ubi-quarkus-native-image:20.1.0-java11心轴,但错误总是一样的:

后来我决定直接用 GraalVM 编译。我下载graalvm-ce-java11-20.2.0了,安装了 native-image 扩展,相应地设置了 JAVA_HOME,它编译时没有任何抱怨,并且本机可执行文件运行良好。我仍然想在 docker 容器中编译而无需安装 GraalVM。

环境:

Quarkus 1.7.1.Final

pom.xml:

更新:我刚刚docker run自己运行了命令并添加了-H:+ReportUnsupportedElementsAtRuntime,这次错误信息不那么模糊了:

0 投票
1 回答
412 浏览

spring-boot - Springdoc-ui + GraalVM 原生 @Configuration 类问题

为了追求学习 GraalVM + SpringBoot 的细节,我正在开发一个示例应用程序,其中只有一小部分操作和功能。其中之一是公开 SpringDoc 端点的可能性(当前使用版本 1.4.5)。即使应用程序已正确编译并且本机映像可执行文件启动,它也会在开始配置内容时引发异常:

我已经有以下依赖项:

还有@SpringBootApplication(proxyBeanMethods = false)我的主要课程。

对于没有 proxyBeanMethods=false 属性的 @Configuration 类的这些情况,是否有任何解决方法?

更新:似乎在 Springdoc 1.4.6-Snapshot 上更新了配置。然而,其他的事情开始抱怨:

现在不知道该去哪里...

0 投票
1 回答
259 浏览

spring-boot - 运行graals原生spring cloud函数示例

我正在尝试在 spring-graals 中运行 aws 函数示例,“java”版本工作正常,但是当我测试“native”版本时,我在控制台中看到以下错误。

该示例将步骤记录到 output.txt 中,我在其中看到以下几行。

版本是spring-graals-native0.70.BUILD-SNAPSHOT.jar

版本是spring-cloud-function3.1.0-SNAPSHOT

pom 文件可以在这里找到

此外,在 aws 控制台中,我只能使用类型的处理程序进行测试,FunctionInvoker而不能使用SpringBootApiGatewayRequestHandler.

0 投票
1 回答
427 浏览

java - 如何使用 GraalVM 从 C++ 调用具有非原始类型作为参数的 Java 入口点方法

我正在尝试使用 graalvm 创建一个 java 代码的共享库(带有头文件和 lib 文件的 dll)。

将有一个带有 2 个 String 类型参数的 java 方法,我将从 C++ 中调用它。

我正在使用一个 maven 项目,我无法从我的 java 代码中创建 dll,我正在使用 graalvm 将我的 java 代码转换为 dll。

我的 Java 代码如下所示:

但是当我尝试将代码构建到 dll 中时,我得到了这个错误

错误:入口点方法参数类型仅限于原始类型、单词类型和枚举(@CEnum):demo.MyClass.myFunc(IsolateThread, String, String)

我搜索但没有找到适合这个问题的解决方案。谁能在这里告诉我如何使用非原始数据类型从 c++ 调用 java 方法任何类型的建议都会有很大的帮助,在此先感谢

0 投票
1 回答
464 浏览

bouncycastle - 如何通过使用 BouncyCastle 的 client-maven-plugin 构建原生映像

我正在开发一个使用针对桌面、iOS 和 Android 的 maven 客户端插件构建的 java Gluon 项目。我现在正在尝试添加对使用 BouncyCastle 进行加密的内部 java 库的依赖。

通过执行代码mvn clean javafx:run会产生一个功能性应用程序,该应用程序可以很好地完成所有加密。

Runningmvn clean client:build -Pios client:run -Pios在 iOS 上运行应用程序, java.security.NoSuchAlgorithmException: no such algorithm: AES for provider BC 但当我们的库尝试生成密码时会抛出几次。

我尝试过的事情:

  • 添加<nativeImageArgs>--enable-all-security-services</nativeImageArgs>到 client-maven-plugin 配置。
  • <reflectionList>在插件配置中添加各种 BouncyCastle 类

系统信息:

  • macOS 10.15.5
  • IntelliJ IDEA Ultimate 2020.2.2
  • java -version:
    openjdk version "11.0.8" 2020-07-14
    OpenJDK Runtime Environment GraalVM CE 20.2.0 (build 11.0.8+10-jvmci-20.2-b03)
    OpenJDK 64-Bit Server VM GraalVM CE 20.2.0 ( build 11.0.8+10-jvmci-20.2-b03,混合模式,共享)

编辑(09/29/20):

将 AES 添加到反射列表似乎让我更进一步,但我仍然遇到安全错误:

这可能是 GraalVM 的一个已知问题,如此处所述

以下是我的 pom 文件中的插件配置:

以及我为在此处共享代码而构建的示例应用程序的源代码(基于 gluon 插件的自动生成的应用程序设置):

0 投票
1 回答
772 浏览

java - Micronaut @Value 在运行原生镜像时没有获取环境变量

我已经使用 graalvm 和 micronaut 构建了本机映像,但是我的本机映像应用程序无法使用 @Value 注释获取环境变量。当我尝试将应用程序作为 jar 运行时,它工作得很好。

这是我得到的错误

消息:设置字段值时出错:没有为类型找到字段“merchantAccount”:example.micronaut.getOriginKeys.WebComponentService 采用的路径:新 GetOriginKeysController([WebComponentService webComponentService]) io.micronaut.context.exceptions.DependencyInjectionException:无法为字段注入值[merchantAccount] 类:example.micronaut.getOriginKeys.WebComponentService

但是,当我尝试获取这样的环境变量时,它工作正常。

这就是我运行本机应用程序的方式