Sbt胖子罐(不包括未使用的代码)

时间:2018-08-03 04:19:21

标签: jar sbt aws-lambda sbt-assembly

因此,我一直在尝试使用scala和sbt做一些AWS lambda。其中一项建议是

  

根据其运行时必需性将部署程序包的大小最小化。这个   将减少部署所需的时间   要在调用之前下载和解压缩的软件包。对于   用Java或.NET Core编写的函数,避免上传整个   AWS SDK库作为部署包的一部分。

我一直在使用sbt-assembly为我的代码和依赖项创建胖罐子,但是当我仅使用10%的aws-core库时,似乎sbt-assembly将打包所有库依赖项内容。想知道是否有什么办法可以减少依赖项的数量,使其减少到代码中实际导入的依赖项(及其依赖项)。

1 个答案:

答案 0 :(得分:1)

据我所知,尚没有直接安全的方法来选择性地将依赖类包含在sbt-compile插件生成的胖罐中。

首先,您应该了解sbt插件仅提供调用项目中的方法所需的设置和jar文件。这意味着依赖的插件将通过预编译的jar文件带到您的项目中,该jar文件由您在构建设置中指定的版本(例如,项目目录中的plugins.sbt)确定。

例如,当您指定要使用sbt-assembly时,将sbt-assembly的罐子从this link带到您的项目中(尽管当您使用最新的sbt版本时,它会被带到您的项目中。默认)。

因此,至少您可能有两种选择来缩小jar文件。

从头开始编译jar文件

对于sbt-aws,on this link提供了其源代码,因此您可以有选择地编译源代码以获得程序要使用的类。

使用该工具缩小jar文件

有多种工具可以根据依赖关系来缩小jar文件。最受欢迎的工具是proguard;似乎对sbt有支持。

警告

another stack overflow answer中所述,根据输入值和其他一些条件,从jar中有选择地选择某些类可能会导致程序崩溃。您已经说过只使用了jar文件的10%,但是您不能确保您的项目所依赖的代码和库中是否需要其他类。当您使用该工具来帮助您缩小jar文件时,请注意该程序对安全性至关重要。