标签: graalvm

如何判断 Java 程序是否在 GraalVM AOT 上下文中运行?

我有一个小 Java 程序。我使用 Graal 构建了一个二进制文件native-image(即 GraalVM AOT 又名 SubstrateVM)。

我的程序可以使用 Java 运行时或本地映像二进制文件执行。判断我正在运行的上下文的最佳方法是什么?

(一般来说,这可能是一种不好的做法,但我相信在某些并不少见的情况下这是不可避免的/必要的。)

graalvm

5
推荐指数
2
解决办法
579
查看次数

使用 DynamoDB 和 Graal 自定义运行时的 Micronaut 无服务器应用程序抛出无法构建 com.amazonaws.partitions.model.Partitions 的实例

此处提供示例项目: https : //github.com/codependent/micronaut-aws-lambda-proxy-graal

我在 Amazon AWS 上部署了一个 Micronaut 应用程序作为 Lambda 函数。它被编译成 GraalVM 本机映像并使用AWS Lambda 自定义运行时运行

如果应用程序不使用 DynamoDB,它会顺利运行。配置它并作为普通 Java 应用程序启动时,它也可以正常工作。但是,当将其用作在 AWS 上运行的 Graal 本机映像时,它会失败:

io.micronaut.context.exceptions.BeanInstantiationException:实例化 [com.amazonaws.services.dynamodbv2.document.DynamoDB] 类型的 bean 时出错:消息:无法从 com/amazonaws/partitions/endpoints.json 加载分区元数据

我正在使用此依赖项: compile 'com.amazonaws:aws-java-sdk-dynamodb:1.11.504'

如何修复无法加载分区元数据错误?

完整日志:

Caused by: com.amazonaws.SdkClientException: Unable to load partition metadata from com/amazonaws/partitions/endpoints.json
at com.amazonaws.partitions.PartitionsLoader.build(PartitionsLoader.java:82)
at com.amazonaws.regions.RegionMetadataFactory.create(RegionMetadataFactory.java:30)
at com.amazonaws.regions.RegionUtils.initialize(RegionUtils.java:64)
at com.amazonaws.regions.RegionUtils.getRegionMetadata(RegionUtils.java:52)
at com.amazonaws.regions.RegionUtils.getRegion(RegionUtils.java:105)
at com.amazonaws.client.builder.AwsClientBuilder.getRegionObject(AwsClientBuilder.java:256)
at com.amazonaws.client.builder.AwsClientBuilder.withRegion(AwsClientBuilder.java:245)
at com.amazonaws.client.builder.AwsClientBuilder.withRegion(AwsClientBuilder.java:232)
at com.codependent.micronaut.awslambda.configuration.DynamoDbConfiguration.dynamoDbClient(DynamoDbConfiguration.kt:18)
at com.codependent.micronaut.awslambda.configuration.$DynamoDbConfiguration$DynamoDbClientDefinition.build(Unknown Source)
at io.micronaut.context.DefaultBeanContext.doCreateBean(DefaultBeanContext.java:1385)
Run Code Online (Sandbox Code Playgroud)

更新:

我错过了异常的以下嵌套原因: Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of …

amazon-dynamodb aws-lambda graalvm micronaut micronaut-aws

5
推荐指数
1
解决办法
2075
查看次数

如何在GraalVM上运行Haskell?

我试图让Haskell在GraalVM上运行,但无法包含运行时环境。在锈它只是一个指定了正确的路径,防锈标准库,如所描述的事情在这里

Haskell是否有同样简单的解决方案?甚至有可能吗?

haskell graalvm

5
推荐指数
1
解决办法
227
查看次数

Swing 应用程序的 Graal 原生图像:在图像堆中检测到一个已启动的线程

public class SimpleApp {
    public static void main( String[] args ) {
        JOptionPane.showMessageDialog(null, "Ciao", "Info", JOptionPane.INFORMATION_MESSAGE);
    }
} 
Run Code Online (Sandbox Code Playgroud)

当我尝试使用创建本机图像时,native-image --no-fallback我得到了这个:

错误:在图像堆中检测到一个已启动的线程。在图像生成器中运行的线程不再在图像运行时运行。该对象可能是由类初始值设定项创建的,并且可以从静态字段访问。默认情况下,所有类初始化都在本机映像构建期间完成。您可以使用选项 -H:ClassInitialization= 手动将类初始化延迟到映像运行时。或者您可以编写自己的初始化方法并从主入口点显式调用它们。

详细信息: Trace: object sun.java2d.opengl.OGLRenderQueue field sun.java2d.opengl.OGLRenderQueue.theInstance

java swing graalvm

5
推荐指数
1
解决办法
1455
查看次数

Micronaut 和 Java 邮件 API

我们正在尝试将部分单体应用迁移到微服务,我们决定使用 micronaut。我们现在正在提取一个电子邮件服务,该服务提供一些输入将呈现电子邮件并与 SMTP 服务器通信以发送它们。

为此,我们使用 Java Mail,当我们尝试创建 GraalVM docker 映像时,它似乎存在一些问题。有没有人设法做到这一点,或者根本不可能让它发挥作用?

一些附加信息:

Dockerfile:

FROM oracle/graalvm-ce:19.2.0 as graalvm
COPY . /home/app/email-service
WORKDIR /home/app/email-service
RUN gu install native-image
RUN native-image --no-server -cp build/libs/email-service-*.jar

FROM frolvlad/alpine-glibc
EXPOSE 8080
COPY --from=graalvm /home/app/email-service .
ENTRYPOINT ["./email-service"]
Run Code Online (Sandbox Code Playgroud)

本机-image.properties:

JDBC 驱动程序、redis、kafka 和 thymeleaf 还进行了其他一些“惰性”初始化。

Args = --initialize-at-run-time=io.micronaut.views.thymeleaf.ThymeleafFactory \
       --initialize-at-run-time=io.micronaut.views.thymeleaf.ThymeleafViewsRenderer \
       --initialize-at-run-time=io.micronaut.views.velocity.VelocityViewsRenderer \
       --initialize-at-run-time=io.micronaut.configuration.lettuce.session.$RedisHttpSessionConfigurationDefinition \
       --initialize-at-run-time=io.micronaut.configuration.kafka.embedded.KafkaEmbedded \
       --initialize-at-run-time=oracle.jdbc.driver.OracleDriver \
       --initialize-at-run-time=java.sql.DriverManager \
       --initialize-at-run-time=org.hibernate.jpa.HibernatePersistenceProvider \
       --initialize-at-run-time=com.sun.mail.util.MailLogger \
       -H:IncludeResources=logback.xml|application.yml \
       -H:Name=email-service \
       -H:Class=com.acme.MySuperDuperApplication
Run Code Online (Sandbox Code Playgroud)

Micronaut 版本: 1.2.0
Java 邮件版本: 1.6.2 ( com.sun.mail:javax.mail:1.6.2) …

java email docker graalvm micronaut

5
推荐指数
1
解决办法
797
查看次数

无法在 Windows 上使用本机图像编译简单的“Hello World”Java 应用程序

我正在尝试Java Hello World使用onnative-image提供的实用程序将一个简单的应用程序编译为本机代码GraalVMWindows但我总是遇到错误(见下文)。

HelloWorld.java

public class HelloWorld {
  public static void main(String[] args) {
    System.out.println("Hello, World!");
  }
}
Run Code Online (Sandbox Code Playgroud)

首先,我class使用以下命令将代码编译为文件:

>javac HelloWorld.java
Run Code Online (Sandbox Code Playgroud)

接下来,我native-image从以下调用命令VS 2017 Developer Command Prompt

>native-image -H:+ReportExceptionStackTraces HelloWorld
[helloworld:20420]    classlist:   1,249.05 ms
[helloworld:20420]        (cap):     704.71 ms
[helloworld:20420]        setup:     997.16 ms
Error: Error compiling query code (in C:\Users\User\AppData\Local\Temp\SVM-2348968769537330415\JNIHeaderDirectives.cpp). Compiler command  CL -IC:\GraalVM\include\win32 C:\Users\User\AppData\Local\Temp\SVM-2348968769537330415\JNIHeaderDirectives.cpp /FeC:\Users\User\AppData\Local\Temp\SVM-2348968769537330415\JNIHeaderDirectives.exe output included error: [Microsoft (R) C/C++ Optimizing Compiler Version 19.16.27035 for …
Run Code Online (Sandbox Code Playgroud)

java windows visual-studio-2017 graalvm graalvm-native-image

5
推荐指数
1
解决办法
536
查看次数

在以下任何来源中均未找到插件 [id:'io.spring.dependency-management',版本:'1.0.11.RELEASE']:

大家好,我是 GraalVM 的新手,正在尝试按照指南启动一个 spring 本机项目https://docs.spring.io/spring-native/docs/current/reference/htmlsingle/#getting-started-buildpacks

当我添加plugins { id 'org.springframework.experimental.aot' version '0.11.0' }到 build.gradle 文件后尝试同步时,它失败并出现错误:

Plugin [id: 'io.spring.dependency-management', version: '1.0.11.RELEASE'] was not found in any of the following sources:

* Try:
Run with --scan to get full insights.

* Exception is:
org.gradle.api.plugins.UnknownPluginException: Plugin [id: 'io.spring.dependency-management', version: '1.0.11.RELEASE'] was not found in any of the following sources:

- Gradle Core Plugins (plugin is not in 'org.gradle' namespace)
- Plugin Repositories (could not resolve plugin artifact 'io.spring.dependency-management:io.spring.dependency-management.gradle.plugin:1.0.11.RELEASE')
Searched in …
Run Code Online (Sandbox Code Playgroud)

java spring graalvm spring-native

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

通过标准JDK 11使用graalvm

我的项目使用了Nashorn Javascript引擎。我正在尝试迁移到java11,也从Nashorn迁移到Graal。我在这里阅读可以从JDK 11开始通过标准JDK安装来使用graal。此外,我还阅读了Graal-SDK已上传到Maven Central的信息,并且具有Java标记polyglot.js.nashorn-compat以方便迁移。因此,我使用了jdk11,将maven依赖项添加到pom.xml中,并使用了Java标志,但是当我尝试通过名称“ graal.js”获取引擎时,此处为null:

ScriptEngine engine = engineManager.getEngineByName("graal.js")
Run Code Online (Sandbox Code Playgroud)

我想念的是什么?如何使其运作?

java nashorn graalvm java-11

4
推荐指数
1
解决办法
2494
查看次数

Hibernate ORM 是否与 GraalVM 本机映像编译兼容?

根据文档,GraalVM 项目中的原生图像编译器对动态代理有一些限制。既然Hibernate大量使用了代理,那么在提前编译好的项目中能正常工作吗?

Quarkus项目似乎表明,它可以,但我的理解主要是一个基础上书签交易后

即使编译为 GraalVM 本机映像,Hibernate ORM 现在也可以工作 - 只需确保您使用 Quarkus 来构建应用程序。

如果我不想(或不能)使用 Quarkus 怎么办?是否可以使用使用 Hibernate 的 GraalVM(和 SubstrateVM)编译本机映像应用程序?

Quarkus 实际上做了什么来启用/支持 Hibernate?

java hibernate graalvm quarkus

4
推荐指数
1
解决办法
979
查看次数

Quarkus 对 Panache 没有严重依赖?

我喜欢在 Quarkus 中使用 JAX-RS 的想法,因为它会使代码不依赖于框架实现。但是,当涉及到 DB 时,我们建议使用“Panache”并将 DB 实体从PanacheEntity. 我想它对于 AOT 工作(基本上是 Quarkus 正在尝试做的事情)非常方便和有益,并且大大简化了 Quarkus 工作,但是它引入了对特定实现的严重依赖,因此我们不能使用纯 JPA 模块。

这与“干净的架构”相冲突,并使此类 DB 模块的测试变得复杂 [如果可能的话]。假设我希望能够为 Spring 和基于 Quarkus 的应用程序模块使用相同的 DB 模块(仅使用纯 JPA 注释)。它迫使我在设计纯度方面复制代码或作弊。

是否有可能使用纯 JPA 注释进行持久化,并且可能会使用插件(在编译期间修改代码)或使用不进行运行时字节码修改/使用反射的 ORM 框架来付出代价?有什么例子吗?

附注。恭喜1.0发布!干得好,Quarkus 团队。

java orm hibernate graalvm quarkus

4
推荐指数
1
解决办法
1555
查看次数