【问题标题】:In sbt, how do you add a plugin that's in the local filesystem?在 sbt 中,如何添加本地文件系统中的插件?
【发布时间】:2012-01-24 00:36:35
【问题描述】:

如果我想在项目树外的本地目录中添加一个插件,那么正确的做法是什么?假设我将 https://github.com/steppenwells/sbt-sh.git 之类的简单内容克隆到 /tmp/sbt-sh - 我在 build.sbt 文件中放入什么以使用 /tmp/sbt-sh 中的插件,该插件将获取我在 /tmp/ 中所做的任何更改sbt-sh?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    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)项目依赖项”)。

    【讨论】:

    • 谢谢。我看到了,但我没有想到你可以只使用 file:// url。似乎应该有一种更直接的方法来做到这一点,比如 addLocalSbtPlugin("/tmp/sbtsh")
    • 这可能也行(我没试过):lazy val shPlugin = file("/tmp/sbt-sh")
    • 此外,如果您输入错误的文件名,您收到的错误消息有点误导:无效的构建 URI(没有可用的处理程序):file:///tmp/sbt-shX/(其中 sbt -shX 不存在)
    • 是的,你的 file() 建议有效:lazy val webPlugin = file("/tmp/sbt-sh")
    【解决方案2】:

    在 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 在第二行中丢失。
    • @axel22 这是后来添加的; 0.13没用过。
    • 感谢您的澄清 - 我只尝试过 1.0+。
    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2015-02-07
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多