我正在使用 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 session 并直接导入它吗?
最佳答案
tl;dr 您无法拥有一个插件项目并且能够在没有使用它的其他项目的情况下对其进行测试。
插件增强了项目的构建定义,因此您可以设置一个插件来使用您想要的功能(其他设置和任务)扩展项目。请参阅Plugins在sbt的官方文档中。
您可以在 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
声明对插件项目的依赖关系,并使用项目引用
。
参见Can multi-projects from GIT be used as SBT dependencies?和 How can sbt pull dependency artifacts from git? .
关于sbt - 如何在插件自己的项目中使用SBT插件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25683768/