因此,我一直在尝试使用scala和sbt做一些AWS lambda。其中一项建议是
根据其运行时必需性将部署程序包的大小最小化。这个 将减少部署所需的时间 要在调用之前下载和解压缩的软件包。对于 用Java或.NET Core编写的函数,避免上传整个 AWS SDK库作为部署包的一部分。
我一直在使用sbt-assembly为我的代码和依赖项创建胖罐子,但是当我仅使用10%的aws-core库时,似乎sbt-assembly将打包所有库依赖项内容。想知道是否有什么办法可以减少依赖项的数量,使其减少到代码中实际导入的依赖项(及其依赖项)。
答案 0 :(得分:1)
据我所知,尚没有直接安全的方法来选择性地将依赖类包含在sbt-compile插件生成的胖罐中。
首先,您应该了解sbt插件仅提供调用项目中的方法所需的设置和jar文件。这意味着依赖的插件将通过预编译的jar文件带到您的项目中,该jar文件由您在构建设置中指定的版本(例如,项目目录中的plugins.sbt)确定。
例如,当您指定要使用sbt-assembly时,将sbt-assembly的罐子从this link带到您的项目中(尽管当您使用最新的sbt版本时,它会被带到您的项目中。默认)。
因此,至少您可能有两种选择来缩小jar文件。
对于sbt-aws,on this link提供了其源代码,因此您可以有选择地编译源代码以获得程序要使用的类。
有多种工具可以根据依赖关系来缩小jar文件。最受欢迎的工具是proguard;似乎对sbt有支持。
如another stack overflow answer中所述,根据输入值和其他一些条件,从jar中有选择地选择某些类可能会导致程序崩溃。您已经说过只使用了jar文件的10%,但是您不能确保您的项目所依赖的代码和库中是否需要其他类。当您使用该工具来帮助您缩小jar文件时,请注意该程序对安全性至关重要。