【问题标题】:Quarkus: Errors when performing native build using AWS classesQuarkus:使用 AWS 类执行本机构建时出错
【发布时间】:2022-01-06 18:15:06
【问题描述】:

我正在使用 Quarkus 2.6.1 构建一个应用程序,它将使用 AWS 开发工具包在 AWS 中执行操作。特别是 DynamoDB,它同时使用标准 DynamoDB 调用,以及用于对象映射的 DynamoDB Mapper。该应用程序在 JVM 模式下运行良好。但是,当我尝试构建本机可执行文件时,出现以下错误:

Error: Unsupported features in 2 methods
Detailed message:
Error: Detected an instance of Random/SplittableRandom class in the image heap. Instances created during image generation have cached seed values and don't behave as expected.  To see how this object got instantiated use --trace-object-instantiation=java.util.Random. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Trace: Object was reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$EqualJitterBackoffStrategy.random of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$EqualJitterBackoffStrategy@2c620143 reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy.equalJitterBackoffStrategy of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy@689747af reached by 
    reading field com.amazonaws.retry.RetryPolicy.backoffStrategy of
        constant com.amazonaws.retry.RetryPolicy@7ba74380 reached by 
    reading field com.amazonaws.ClientConfiguration.DEFAULT_RETRY_POLICY
Error: Detected an instance of Random/SplittableRandom class in the image heap. Instances created during image generation have cached seed values and don't behave as expected.  To see how this object got instantiated use --trace-object-instantiation=java.util.Random. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Trace: Object was reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$FullJitterBackoffStrategy.random of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$FullJitterBackoffStrategy@22c9268f reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy.fullJitterBackoffStrategy of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy@689747af reached by 
    reading field com.amazonaws.retry.RetryPolicy.backoffStrategy of
        constant com.amazonaws.retry.RetryPolicy@7ba74380 reached by 
    reading field com.amazonaws.ClientConfiguration.DEFAULT_RETRY_POLICY

com.oracle.svm.core.util.UserError$UserException: Unsupported features in 2 methods
Detailed message:
Error: Detected an instance of Random/SplittableRandom class in the image heap. Instances created during image generation have cached seed values and don't behave as expected.  To see how this object got instantiated use --trace-object-instantiation=java.util.Random. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Trace: Object was reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$EqualJitterBackoffStrategy.random of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$EqualJitterBackoffStrategy@2c620143 reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy.equalJitterBackoffStrategy of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy@689747af reached by 
    reading field com.amazonaws.retry.RetryPolicy.backoffStrategy of
        constant com.amazonaws.retry.RetryPolicy@7ba74380 reached by 
    reading field com.amazonaws.ClientConfiguration.DEFAULT_RETRY_POLICY
Error: Detected an instance of Random/SplittableRandom class in the image heap. Instances created during image generation have cached seed values and don't behave as expected.  To see how this object got instantiated use --trace-object-instantiation=java.util.Random. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Trace: Object was reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$FullJitterBackoffStrategy.random of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$FullJitterBackoffStrategy@22c9268f reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy.fullJitterBackoffStrategy of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy@689747af reached by 
    reading field com.amazonaws.retry.RetryPolicy.backoffStrategy of
        constant com.amazonaws.retry.RetryPolicy@7ba74380 reached by 
    reading field com.amazonaws.ClientConfiguration.DEFAULT_RETRY_POLICY

    at com.oracle.svm.core.util.UserError.abort(UserError.java:87)
    at com.oracle.svm.hosted.FallbackFeature.reportAsFallback(FallbackFeature.java:233)
    at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:759)
    at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:529)
    at com.oracle.svm.hosted.NativeImageGenerator.run(NativeImageGenerator.java:488)
    at com.oracle.svm.hosted.NativeImageGeneratorRunner.buildImage(NativeImageGeneratorRunner.java:403)
    at com.oracle.svm.hosted.NativeImageGeneratorRunner.build(NativeImageGeneratorRunner.java:569)
    at com.oracle.svm.hosted.NativeImageGeneratorRunner.main(NativeImageGeneratorRunner.java:122)
    at com.oracle.svm.hosted.NativeImageGeneratorRunner$JDK9Plus.main(NativeImageGeneratorRunner.java:599)
Caused by: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Unsupported features in 2 methods
Detailed message:
Error: Detected an instance of Random/SplittableRandom class in the image heap. Instances created during image generation have cached seed values and don't behave as expected.  To see how this object got instantiated use --trace-object-instantiation=java.util.Random. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Trace: Object was reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$EqualJitterBackoffStrategy.random of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$EqualJitterBackoffStrategy@2c620143 reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy.equalJitterBackoffStrategy of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy@689747af reached by 
    reading field com.amazonaws.retry.RetryPolicy.backoffStrategy of
        constant com.amazonaws.retry.RetryPolicy@7ba74380 reached by 
    reading field com.amazonaws.ClientConfiguration.DEFAULT_RETRY_POLICY
Error: Detected an instance of Random/SplittableRandom class in the image heap. Instances created during image generation have cached seed values and don't behave as expected.  To see how this object got instantiated use --trace-object-instantiation=java.util.Random. The object was probably created by a class initializer and is reachable from a static field. You can request class initialization at image runtime by using the option --initialize-at-run-time=<class-name>. Or you can write your own initialization methods and call them explicitly from your main entry point.
Trace: Object was reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$FullJitterBackoffStrategy.random of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$FullJitterBackoffStrategy@22c9268f reached by 
    reading field com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy.fullJitterBackoffStrategy of
        constant com.amazonaws.retry.PredefinedBackoffStrategies$SDKDefaultBackoffStrategy@689747af reached by 
    reading field com.amazonaws.retry.RetryPolicy.backoffStrategy of
        constant com.amazonaws.retry.RetryPolicy@7ba74380 reached by 
    reading field com.amazonaws.ClientConfiguration.DEFAULT_RETRY_POLICY

    at com.oracle.graal.pointsto.constraints.UnsupportedFeatures.report(UnsupportedFeatures.java:129)
    at com.oracle.svm.hosted.NativeImageGenerator.runPointsToAnalysis(NativeImageGenerator.java:756)
    ... 6 more

我在 macOS 12.1 上使用 Quarkus 2.6.1、OpenJDK 11.0.7 和 GraalVM 21.3.0 Java 11 CE 进行构建。有什么我想念的吗?是否需要包含其他设置或编译器标志来支持这一点?

【问题讨论】:

    标签: java amazon-web-services quarkus graalvm graalvm-native-image


    【解决方案1】:

    正如错误中所述,GraalVM 不喜欢某些功能。它可能不是您的问题,就像不支持 GraalVM 的底层库(可能是 AWS 开发工具包)一样。话虽如此,您可以:

    1. 从代码中删除有问题的函数并找到另一种处理方式。
    2. 忽略使用本机并坚持使用 JVM 模式。

    无论哪种方式,我都可能会将问题报告给图书馆的作者。请记住,GraalVM 是相当新的,报告这些错误有助于使工具成熟。

    【讨论】:

      猜你喜欢
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 2023-04-07
      • 2012-12-12
      • 1970-01-01
      • 2021-10-08
      • 2016-03-11
      相关资源
      最近更新 更多