【发布时间】:2012-01-24 00:36:35
【问题描述】:
如果我想在项目树外的本地目录中添加一个插件,那么正确的做法是什么?假设我将 https://github.com/steppenwells/sbt-sh.git 之类的简单内容克隆到 /tmp/sbt-sh - 我在 build.sbt 文件中放入什么以使用 /tmp/sbt-sh 中的插件,该插件将获取我在 /tmp/ 中所做的任何更改sbt-sh?
【问题讨论】:
如果我想在项目树外的本地目录中添加一个插件,那么正确的做法是什么?假设我将 https://github.com/steppenwells/sbt-sh.git 之类的简单内容克隆到 /tmp/sbt-sh - 我在 build.sbt 文件中放入什么以使用 /tmp/sbt-sh 中的插件,该插件将获取我在 /tmp/ 中所做的任何更改sbt-sh?
【问题讨论】:
project/project/Build.scala 中的类似内容应该这样做:
import sbt._
object PluginDef extends Build {
lazy val projects = Seq(root)
lazy val root = Project("plugins", file(".")) dependsOn( shPlugin )
lazy val shPlugin = uri("file:///tmp/sbt-sh")
}
请注意,双重嵌套的project 目录是必需的。我不知道有任何方法可以从 .sbt 文件中执行此操作(可能有方法,但我不知道它是什么)。
这已记录在 here(请参阅“1d)项目依赖项”)。
【讨论】:
在 0.13 中,有 a) 一种简单的方法,b) 更好的文档。 @PaulButcher 的答案指向section 1d of the sbt documentation for plugins,它现在告诉您编辑 project/plugins.sbt:
高达 0.13.0:
(@axel22 指出这已经改变,所以在复制之前检查当前文档)
lazy val root = project.in( file(".") ).dependsOn( assemblyPlugin )
lazy val assemblyPlugin = uri("git://github.com/sbt/sbt-assembly#0.9.1")
当然,uri(... 可以替换为文件("/tmp/sbt-sh")。
更新:
After sbt 0.13.0 你需要用RootProject 包装 uri 或文件。即,
lazy val root = project.in( file(".") ).dependsOn( assemblyPlugin )
lazy val assemblyPlugin = RootProject(file("lib/sbt-sh"))
【讨论】:
RootProject 在第二行中丢失。