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

AWS Lambda运行Java程序遭遇java.lang.NoClassDefFoundError求助

解决AWS Lambda中java.lang.NoClassDefFoundError: com.amazonaws.auth.BasicAWSCredentials问题

你遇到的java.lang.NoClassDefFoundError本质是Lambda运行环境中缺少BasicAWSCredentials类所在的依赖包——本地运行正常是因为Maven会自动加载依赖,但默认打包方式没有把第三方依赖一起打包进部署包。以下是具体解决步骤:

1. 使用Maven Shade插件打包包含所有依赖的JAR

修改你的pom.xml,添加Maven Shade插件配置,它会将项目代码与所有依赖的第三方JAR合并成一个完整的可执行JAR,确保Lambda能找到所有所需类:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>processador-de-dados</artifactId>
  <version>1.0-SNAPSHOT</version>
  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
  </properties>
  <name>Archetype - processador-de-dados</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 -->
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-s3</artifactId>
      <version>1.12.565</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-lambda-java-core -->
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-lambda-java-core</artifactId>
      <version>1.2.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-core -->
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-core</artifactId>
      <version>1.12.565</version>
    </dependency>
  </dependencies>

  <!-- 添加Maven Shade插件 -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.5.1</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <!-- 可选:指定主类,如果需要直接运行JAR -->
              <mainClass>amazonenv.Main</mainClass>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

执行打包命令:

mvn clean package

打包完成后,在target目录下会生成两个JAR文件:一个是仅包含项目代码的JAR,另一个是带-shaded后缀的包含所有依赖的完整JAR,部署这个带-shaded的JAR到Lambda即可。

2. 关键最佳实践提醒

  • 不要硬编码AWS凭证:你当前代码中使用BasicAWSCredentials硬编码Access Key和Secret Key是不安全的,且不符合AWS最佳实践。应该为Lambda配置IAM角色,赋予其访问S3等服务的权限,SDK会自动从Lambda运行环境中获取凭证,无需手动创建BasicAWSCredentials实例。
  • 确认Lambda运行时版本:确保你选择的Lambda运行时是Java 17,与项目编译版本一致,避免版本不兼容问题。

验证步骤

  1. 解压生成的shaded JAR文件,检查是否存在com/amazonaws/auth/BasicAWSCredentials.class文件;
  2. 将该JAR重新部署到AWS Lambda;
  3. 测试Lambda函数,确认错误消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:14:54