将所有 SBT 依赖项复制到本地文件夹

Copy all SBT dependencies to local folder

我正在对我的 Play 进行 docker 化!框架应用程序,目前,我的构建需要超过 15 分钟才能完成。该过程的很大一部分实际上是在下载依赖项,因为我的构建器还没有缓存的概念。我想,将我的项目需要的所有依赖项复制到本地文件夹是个好主意,这样就不必一次又一次地下载所有内容。但是,问题是,我不知道该怎么做?我知道 SBT 具有允许您指定本地存储库的功能,但我不知道允许我将所有内容复制到特定文件夹的功能。

更新 (2015-07-13):

好的,所以你想要的是将所有依赖项保存在你想要的文件夹中,你可以在 运行 sbt,

时尝试这个
sbt -Dsbt.ivy.home=/your/local/path/.ivy 

然后它将在 /your/local/path/.ivy/cache.

中保留所有依赖文件或为构建您的应用程序而下载的任何文件

如果您想将它们保留在您的项目中,

sbt -Dsbt.ivy.home=/some/path/to/your-project/.ivy 

然后文件将存储在/some/path/to/your-project/.ivy/cache文件夹中。

对了,docker不支持缓存?嗯,你为什么不尝试一些不错的 CI 服务,比如 Semaphore CI,让它将你的应用程序部署到 Docker? (我与 Semaphore 没有任何个人或任何其他联系。这只是我使用的服务,我尝试了大约五种不同的 CI 工具,最喜欢那个)。

已更新 (2015-07-12):哦,抱歉,你的问题不是关于使用本地存储库而是将所有内容复制到它。

这可能不是您所要求的,但可能会解决您的问题。

updateOptions := updateOptions.value.withCachedResolution(true)

注意:这是一项实验性功能。

详情:sbt doc - Cached-Resolution

============================================= ==

您可以通过

指定存储库
resolvers += name at location

喜欢

resolvers += "Sonatype OSS Snapshots" at "https://oss.sonatype.org/content/repositories/snapshots"

所以对于本地maven repo,你可以简单地做

resolvers += Resolver.mavenLocal

然而,就我而言,当我这样做时,它试图访问 PROJECT_HOME/{user.home}/.m2/repository,这是不正确的。

我想要的是 $HOME/.m2/repository,这是 maven 本地存储库的位置。所以我将以下行放在 build.sbt 而不是 Resolver.mavenLocal 中,它似乎有效。

resolvers += "mavenLocal" at s"${sys.props("user.home")}/.m2/repository"

详情:sbt doc - Library-Dependencies

试试 sbt pack 插件 https://github.com/xerial/sbt-pack 它有 packCopyDependencies 任务。也许这就是您要找的。