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

Redhat Fuse 7.13中AWS SDK Java 2.x SecretsManager类缺失问题解决

解决Redhat Fuse迁移AWS SDK Java 2后SecretsManagerClient类找不到的问题

核心原因

你遇到的java.lang.NoClassDefFoundError是因为OSGi环境下,虽然配置了可选包导入,但Redhat Fuse未部署AWS SDK Java 2的SecretsManager相关bundle,且你的bundle未将依赖类打包进去,导致运行时无法加载类。以下是最小改动的解决方法:


1. 嵌入SecretsManager依赖到你的bundle

使用Maven的maven-bundle-plugin将AWS SDK SecretsManager及其依赖直接嵌入到你的Fuse bundle中,无需额外部署第三方bundle,这是最小改动的方案:

<plugin>
  <groupId>org.apache.felix</groupId>
  <artifactId>maven-bundle-plugin</artifactId>
  <version>3.5.1</version> <!-- 匹配你项目中使用的版本 -->
  <extensions>true</extensions>
  <configuration>
    <instructions>
      <!-- 嵌入SecretsManager依赖及传递依赖 -->
      <Embed-Dependency>secretsmanager;scope=compile|runtime</Embed-Dependency>
      <Embed-Transitive>true</Embed-Transitive>
      <!-- 保留原有可选导入配置,避免冲突 -->
      <Import-Package>
        software.amazon.awssdk.services.secretsmanager.*;resolution:=optional,
        *
      </Import-Package>
      <!-- 确保嵌入的类被正确导出(如果需要其他bundle调用),否则可省略 -->
      <Export-Package>
        com.your.package.*;version="${project.version}"
      </Export-Package>
    </instructions>
  </configuration>
</plugin>

2. 统一AWS SDK版本依赖

确保项目中所有AWS SDK 2的依赖版本一致,避免版本不匹配导致的类缺失。通过BOM管理版本:

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>software.amazon.awssdk</groupId>
      <artifactId>bom</artifactId>
      <version>2.30.3</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

3. 验证并重新构建

  • 执行mvn clean install重新构建bundle
  • 解压生成的bundle JAR,检查BOOT-INF/lib(Spring Boot Fuse bundle)或根目录下是否包含secretsmanager-2.30.3.jar及相关AWS SDK核心依赖
  • 部署到Fuse环境后,确认类加载错误消失

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:55:02