You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

引入AWS SDK依赖后Quarkus Native编译失败(Netty日志相关?)

Quarkus Native构建AWS Secrets Manager SDK依赖问题解决方案

核心建议:使用Quarkus官方AWS扩展替代原生SDK

直接引入software.amazon.awssdk:secretsmanager会引发一系列GraalVM Native镜像构建的兼容性问题,这是因为原生AWS SDK的依赖链未针对Quarkus Native优化。最简洁可靠的解决方式是改用Quarkus官方提供的AWS Secrets Manager扩展,该扩展已预先处理所有Native构建的适配工作,包括依赖兼容、GraalVM配置、初始化策略等。

操作步骤

  1. 移除原生SDK依赖:从项目依赖中删除software.amazon.awssdk:secretsmanager及其关联的AWS SDK核心依赖。
  2. 添加Quarkus AWS Secrets Manager扩展:
    • Maven项目:在pom.xml中添加依赖
      <dependency>
          <groupId>io.quarkus</groupId>
          <artifactId>quarkus-amazon-secretsmanager</artifactId>
      </dependency>
      
    • Gradle项目:在build.gradle中添加依赖
      implementation 'io.quarkus:quarkus-amazon-secretsmanager'
      
  3. 重新构建Native镜像:使用原有命令执行构建
    ./mvnw package -Dnative -Dquarkus.native.container-build=true
    

手动兼容原生SDK的方案(不推荐)

如果因特殊原因必须使用原生AWS SDK,可按以下步骤逐一解决遇到的错误:

1. 解决io.netty.util.internal.logging.Log4J2Logger未找到问题

AWS SDK依赖的Netty版本与Quarkus默认版本存在兼容性差异,需引入Quarkus官方Netty扩展并配置日志桥接:

  • 添加Quarkus Netty扩展依赖:
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-netty</artifactId>
    </dependency>
    
  • 添加SLF4J到JBoss Logging的桥接依赖,替换Netty默认的Log4J2依赖:
    <dependency>
        <groupId>org.jboss.slf4j</groupId>
        <artifactId>slf4j-jboss-logging</artifactId>
    </dependency>
    

2. 解决org.apache.commons.logging.LogFactory未找到问题

AWS SDK依赖的Apache HttpClient使用了commons-logging,需用桥接依赖替换原生commons-logging:

<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>commons-logging-jboss-logging</artifactId>
</dependency>

3. 解决Random/SplittableRandom实例在镜像堆中的问题

Apache HttpClient的NTLMEngineImpl类中的静态Random字段在镜像构建时被提前初始化,违反GraalVM规则。需配置该类延迟初始化:

  • 在项目中创建src/main/resources/META-INF/native-image/org.apache.httpcomponents/httpclient/native-image.properties文件,添加:
    Args=--initialize-at-run-time=org.apache.http.impl.auth.NTLMEngineImpl
    

关于兼容性的说明

并非所有使用Quarkus Native + AWS Lambda的开发者都会遇到此类问题——只要使用Quarkus官方提供的AWS系列扩展,就能避免这些手动适配的麻烦。官方扩展已与AWS SDK、Quarkus Native深度整合,覆盖了所有Native构建所需的配置细节。

内容的提问来源于stack exchange,提问作者Nicklas Karlsson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 08:27:08