【问题标题】:How to use an SBT plugin in the plugin's own project?如何在插件自己的项目中使用 SBT 插件?
【发布时间】:2014-10-30 06:47:05
【问题描述】:

我正在使用 SBT 插件迈出第一步。

object WoahPlugin extends Plugin {
  override lazy val settings = commands += thingCommand

  lazy val thingCommand = Command.command("thing") {state: State =>
    println("this is the thing~!")
    state
  }
}

定义一个命令后,我想尝试一下。我是否需要构建插件并定义一个使用它的新项目才能试用它?或者我可以在插件的项目中打开一个 SBT 会话并直接导入它吗?

【问题讨论】:

    标签: sbt


    【解决方案1】:

    tl;dr 你不能拥有一个插件项目,并且能够在没有另一个项目使用它的情况下对其进行测试。

    插件增强了项目的构建定义,因此您可以设置一个插件,使用您想要的功能扩展项目 - 附加设置和任务。见 sbt 官方文档中的Plugins

    您在project 目录下的元项目中设置插件,按照惯例通常在project/plugins.sbt 中(但任何project/*.sbt 文件都可以)。

    如果您需要测试一个插件,您有两个值得注意的选择,所有这些都归结为有一个单独的插件项目和另一个使用它 - 选择与测试项目的位置相比正在测试的插件项目。

    project 元项目中的插件项目

    您可以在project/src/main/scala 下拥有插件的源代码,因此它们属于自己的项目,但由于它们位于project 中的目录,它们会自动成为上一级项目的元项目的一部分。

    使用元项目project 中的插件源,您可以在project/plugins.sbt 中定义插件依赖项并安装插件(given the recent changes to sbt since 0.13.5 不一定意味着插件已启用)。

    任何地方的插件项目

    插件项目是一个 sbt 项目,因此可以使用 ProjectRef 从另一个 sbt 项目中引用。如果是git://file:// 项目,则使用dependsOn 声明对插件项目的依赖关系,并使用ProjectRef 声明项目引用。

    参见Can multi-projects from GIT be used as SBT dependencies?How can sbt pull dependency artifacts from git?

    【讨论】:

    • 感谢您的全面回答。不过,您对标题的编辑很奇怪。我问有没有可能,答案是否定的。现在看来,我已经假设这是可能的。
    • 非常感谢您接受这个答案。至于标题的变化,我认为它并没有太大的区别,但是除非你打败我,否则我稍后会更正它。
    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 2017-08-19
    • 2014-01-14
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    相关资源
    最近更新 更多