我已经创建了 AWS Lambda 函数,现在我正在尝试在 AWS 上设置部署。我创建了包含以下内容的 buildspec.yml 文件:
version: 0.1
phases:
build:
commands:
- echo Entering build phase...
- echo Build started on `date`
- mvn package shade:shade
- mv target/classes/* .
- rm -rf target src buildspec.yml pom.xml
- aws cloudformation package --template template.json --s3-bucket $S3_BUCKET --output-template template-export.json
artifacts:
type: zip
files:
- template-export.json
现在,当我将代码推送到 AWS CodeCommit 时,构建过程成功运行,但在输出 s3 存储桶中只有 130 kb 的输出文件。这意味着创建的包中缺少我的依赖项,当我尝试运行我的 Lambda 时,出现以下错误:
加载类 com.test.handler 时出错:org/apache/log4j/Logger:类 java.lang.NoClassDefFoundError
在我的 pom.xml 文件中,我添加了 shade 插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
当我在我的 PC 上运行命令mvn package
时,一切正常,我得到包含所有依赖项的 jar 文件(大小略超过 10mb),如果我手动将此 jar 部署到 AWS lambda 函数,一切都按预期工作。
我也尝试按照本教程进行操作:Link,但没有任何改变。
有人可以帮忙吗,我真的不知道我在这里缺少什么:/