如何在Java Maven多模块项目中构建打包含全部依赖的Lambda层?
同Maven多模块项目构建Lambda层与函数的实现方案
1. 项目模块结构设计
直接在现有Maven多模块项目内新增两个平级子模块即可,无需额外创建独立项目:
- 根父项目:统一管理全项目依赖版本、插件公共配置,声明所有子模块
lambda-layer子模块:存放Lambda层需要的公共依赖、通用工具类代码,最终打包输出符合Lambda运行要求的层部署包lambda-func子模块:存放业务Lambda函数代码,仅打包自身业务逻辑,编译时依赖lambda-layer模块即可
2. 核心配置说明
2.1 lambda-layer模块打包配置
该模块最终需要输出目录结构为java/lib/下存放所有依赖jar的zip包,适配AWS Lambda Java层的加载规则。
首先在模块的src/main/assembly目录下新建layer.xml打包规则文件:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd"> <id>lambda-layer</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <dependencySets> <dependencySet> <outputDirectory>java/lib</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <scope>runtime</scope> </dependencySet> </dependencySets> </assembly>
然后在lambda-layer模块的pom中添加maven-assembly-plugin插件配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> <configuration> <descriptors> <descriptor>src/main/assembly/layer.xml</descriptor> </descriptors> <appendAssemblyId>false</appendAssemblyId> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>
2.2 lambda-function模块配置
该模块只需打包自身业务代码,层内已经包含的依赖全部排除即可:
- 首先在pom中引入
lambda-layer依赖,范围设为provided:
<dependency> <groupId>你的组织groupId</groupId> <artifactId>lambda-layer</artifactId> <version>${project.version}</version> <scope>provided</scope> </dependency>
- 使用
maven-shade-plugin打包时,排除所有provided范围的依赖,最终输出的jar仅包含业务代码,体积大幅缩小。
3. 构建执行
直接在根项目根目录执行命令:mvn clean package
一次构建即可同时得到两个产物:
lambda-layer/target/目录下的Lambda层部署zip包lambda-func/target/目录下的Lambda函数部署jar包
4. 注意事项
- 层的zip包目录结构必须严格匹配
java/lib/存放所有jar的规则,否则Lambda运行时无法加载层内的类 - 公共依赖版本统一由父项目管理,层和函数模块无需单独声明版本,避免版本冲突
- 迭代时层和函数代码在同一个项目内修改,无需跨项目维护,版本同步更简单
内容的提问来源于stack exchange,提问作者arvind1988
相关产品推荐
相关产品推荐

