如何在AWS Lambda容器镜像构建中使用Gradle的shadowJar
解决方案
完全可以直接使用Gradle Shadow插件生成的Shadow JAR构建AWS Lambda Java容器镜像,无需额外引入复制依赖的任务,实现方式更简洁。
具体操作步骤
- 保留AWS官方Java Lambda基础镜像作为父镜像,无需修改基础层配置
- 修改Dockerfile,直接将生成的Shadow JAR复制到镜像内
${LAMBDA_TASK_ROOT}/lib/目录即可,Lambda的Java运行环境会自动加载该目录下所有JAR包的类资源。
调整后的Dockerfile参考:
FROM public.ecr.aws/lambda/java:11 # 直接复制Shadow插件生成的全量JAR包 COPY build/libs/*-all.jar ${LAMBDA_TASK_ROOT}/lib/ # CMD保持为你的handler全类名即可,无需修改 CMD [ "com.example.LambdaHandler::handleRequest" ]
- Gradle配置侧无需再添加
copyRuntimeDependencies相关任务,只要你已经正确引入Shadow插件,执行gradlew shadowJar命令即可生成打包了所有依赖的*-all.jar文件,构建镜像前先执行该构建任务即可。
注意事项
如果你的Lambda函数依赖了包含服务提供者配置(SPI)的组件(比如AWS SDK等),需要在Shadow插件配置中开启服务文件合并,避免运行时出现类加载异常,配置参考:
shadowJar { mergeServiceFiles() }
内容的提问来源于stack exchange,提问作者madhead
相关产品推荐
相关产品推荐

