将所有 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 pack 插件 https://github.com/xerial/sbt-pack
它有 packCopyDependencies 任务。也许这就是您要找的。
我正在对我的 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 pack 插件 https://github.com/xerial/sbt-pack 它有 packCopyDependencies 任务。也许这就是您要找的。