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

时间:2015-07-09 22:58:09

标签: scala playframework docker sbt

我将游戏停靠!框架应用程序,目前,我的构建需要超过15分钟才能完成。这个过程的很大一部分实际上是下载依赖项,因为我的构建器还没有缓存的概念。我想,将我的项目所需的所有依赖项复制到本地文件夹是一个好主意,因此它不必一次又一次地下载所有内容。但问题是,我不知道该怎么做?我知道SBT有一个允许你指定本地仓库的功能,但是我不知道允许我将所有内容复制到某个文件夹的功能。

2 个答案:

答案 0 :(得分:3)

已更新(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不支持缓存?嗯,为什么不尝试像Semaphore CI这样的优秀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回购,你可以简单地做

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

答案 1 :(得分:0)

尝试使用sbt pack插件https://github.com/xerial/sbt-pack 它有packCopyDependencies任务。也许这就是你要找的东西。