使用Gradle构建AWS Java Lambda,使用shadowJar或buildZip进行存档上传?

Mar*_*lte 6 gradle amazon-web-services aws-lambda

描述

\n\n

我正在开发AWS Java Lambdas,使用Gradle作为我的构建工具。

\n\n

AWS 需要上传“独立”Java 存档(.jar、.zip...),其中必须包含所有内容、我的源代码、依赖项等。

\n\n

有用于此目的的 Gradle 插件影子,可以像这样包含它:

\n\n
import com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCacheFileTransformer\n\n...\n\nshadowJar { \n  archiveName = "${project.name}.jar"\n  mergeServiceFiles()\n  transform(Log4j2PluginsCacheFileTransformer)  \n}\nbuild.dependsOn shadowJar\n
Run Code Online (Sandbox Code Playgroud)\n\n

gradle build生成一个文件somefunction.jar,在我的例子中,它的大小为 9.5MB。

\n\n

AWS文档建议

\n\n
\n

将依赖项 .jar 文件放在单独的 /lib 目录中

\n
\n\n

有关如何执行此操作的具体说明,请参阅为 Java 函数创建 ZIP 部署包

\n\n
task buildZip(type: Zip) {\n  archiveName = "${project.name}.zip"\n  from compileJava\n  from processResources\n  into(\'lib\') {\n    from configurations.runtimeClasspath\n  }\n}\nbuild.dependsOn buildZip\n
Run Code Online (Sandbox Code Playgroud)\n\n

gradle build生成一个文件build/distributions/somefunction.zip,在我的例子中,它的大小为 8.5MB。

\n\n

zip 和 jar 两个档案都可以上传到 AWS 并运行良好。性能似乎是一样的。

\n\n

问题

\n\n

哪种存档更受欢迎,Zip 还是 (shdow)Jar?

\n\n

我想到了更具体的问题:

\n\n
    \n
  • AWS 文档表示“这[将依赖项 .jar 文件放入单独的 /lib 目录中]比将所有 function\xe2\x80\x99s 代码放入具有大量 .class 文件的单个 jar 中要快。” 有谁知道,到底什么更快?构建时间?冷/热启动?执行时间处理时间?
  • \n
  • 构建 Zip 时,我没有使用 ShadowJar 功能mergeServiceFiles()Log4j2PluginsCacheFileTransformer。在最坏的情况下,不使用 mergeServiceFiles 应该会减少执行时间。只要我省略Log4j2插件,我就可以省略Log4j2PluginsCacheFileTransformer。正确的?
  • \n
  • 使用其中之一是否有任何性能考虑?
  • \n
\n