当前位置: 首页 > 知识库问答 >
问题:

Quakus原生图像构建失败

范弘亮
2023-03-14

我正在尝试在MacOS上为AWS Lambda函数构建本机映像。该应用程序在IDE中编译和运行良好,但在尝试本机映像构建时,我遇到了以下问题:

 mvn clean install -Dnative -Dquarkus.native.container-build=true
 mvn clean install -Pnative -Dquarkus.native.container-build=true

>

<dependency>
    <groupId>io.quarkus</groupId>
    <artifactId>quarkus-amazon-lambda</artifactId>
</dependency>

错误:4种方法中不支持的功能详细信息:错误:在映像堆中检测到Random/SplittableRandom类的实例。在映像生成过程中创建的实例具有缓存的种子值,其行为不符合预期。要查看这个对象是如何被实例化的,请使用--trace object instantiation=java。util。随机的该对象可能是由类初始值设定项创建的,可以从静态字段访问。可以使用选项--initialize at run time=,在映像运行时请求类初始化。或者您可以编写自己的初始化方法,并从主入口点显式调用它们。Trace:读取字段com已到达对象。亚马逊。重试。预定义的backoffstrategies$EqualJitterBackoffStrategy。常数com的随机性。亚马逊。重试。预定义的回退策略$EqualJitterBackoffStrategy@a7c6c06通过reading field com访问。亚马逊。重试。预定义的backoffstrategies$SDKDefaultBackoffStrategy。常量com的EqualJitterBackOffset策略。亚马逊。重试。预定义的回退策略$SDKDefaultBackoffStrategy@6f61d2d9通过扫描方法com实现。亚马逊。重试。预定义的RetryPolicys。getDefaultBackoffStrategy(预定义的RetryPolicys.java:110)

>

  • 如果我将pom文件更改为以下内容

     <dependency>
         <groupId>io.quarkus</groupId>
         <artifactId>quarkus-amazon-lambda-archetype</artifactId>
         <version>2.4.2.Final</version>
     </dependency>
    

    构建成功,没有错误,但功能失败。例如,zip不是在/target目录中创建的。

    [ /target目录的内容]

    • com_abc_demo_xyz1.0-SNAPSHOT-本机-图像-源代码-jar
    • com_abc_demo_xyz-1.0-快照-跑步者
    • com_abc_demo_xyz-1.0-SNAPSHOT. jar
    • 故障安全报告
    • 生成源
    • maven-Archiver
    • maven-状态
    • 夸库-应用程序
    • quarkus-artifact.properties

    【测试环境】

    • Java版本11.0.6
    • Docker Desktop 4.1.1
    • macOS蒙特雷
    • Maven 3.8.3
    • GraalVM: graalvm-ce-java11-21.3.0
    • JAVA_PATH=/库/Java /JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home
    • GRAALVM_HOME=/库/Java /JavaVirtualMachines/graalvm-ce-java11-21.3.0/Contents/Home

    即使启用了调试功能,如何解决这个问题对我来说也没有意义。

    女同性恋

  • 共有2个答案

    高鸿振
    2023-03-14

    使构建的这一部分成为可能。我个人更喜欢yaml属性,所以首先要添加到pom中的是使用yaml属性的能力:

    xml prettyprint-override">        <dependency>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-config-yaml</artifactId>
            </dependency>
    

    然后在应用程序中。yamlsrc/main/resources中添加所需的命令行选项,例如。

    quarkus:
      banner:
        enabled: false
    
      native:
        additional-build-args:
          - --initialize-at-run-time=io.grpc.netty.shaded.io.netty.util.internal.logging.Log4JLogger,io.netty.util.internal.logging.Log4JLogger
          - --allow-incomplete-classpath
    
    
    邵俊才
    2023-03-14

    默认情况下,Quarkus在构建时初始化所有类。

    这意味着,如果在代码中使用Random/SplittableRandom,这将在构建时初始化,从而导致此错误。

    如上所述,当您试图在静态块中初始化这些类时,会出现此问题,例如:

    public class RandomWrapper {
    
        public static final Random random;
    
        static {
            random = new Random();
        }
    }
    

    因为你的错误而失败。但是,正如异常告诉您的那样,您可以使用——initialize at run time指定应该在运行时初始化哪些类=

    xml prettyprint-override">quarkus.native.additional-build-args=--initialize-at-run-time=org.acme.RandomWrapper
    

     类似资料:
    • 我在使用vertx redis客户端以本机模式构建quarkus应用程序时遇到问题 我正在尝试创建一个包含连接、设置和添加方法的缓存类。当我使用set和get方法时,我试图打开一个新的redis连接。 使用。/mvnw编译夸克斯:开发应用程序运行正常。但是,当我试图构建一个本地映像时,我收到错误: 我的缓存类:

    • 我正在运行一个React-Native应用程序,但当我试图在android目录下gradlew installDebug时,我得到了一个构建失败。以下是我使用时得到的信息: 这是该项目的回购是从我试图设置应用程序到我的genymotion模拟器,但构建从未完成。 我已经运行了react-native start命令,并设置了与couchbase lite服务器的同步。不确定这是否是相关信息。我对本

    • 我刚刚从https://micronaut.io/launch for Java8下载了一个新项目,该项目具有以下特性: AWS lambda AWS Lambda运行时 GraalVM支持 在readme.md中,它实际上只显示了使用gradle获得本机映像的构建指令。但是用Maven怎么做呢?

    • 我是一个很新的反应原生应用程序开发人员。请帮助我解决以下问题,我在执行react-native Run-Android时遇到以下问题。 运行jetifier将库迁移到AndroidX的信息。您可以使用“--no-jetifier”标志禁用它。Jetifier找到1112个文件要转发JEtify。使用8名工作人员...信息正在启动JS服务器...“adb”不能识别为内部或外部命令、可操作程序或批处理