我正在尝试构建一个由多个项目聚合的Scala项目,其中一个项目是一个sbt插件。我想在同一个父项目下的另一个子项目中使用这个插件,但我不太明白该怎么做。
项目根目录中的“build.sbt”是这样的:
lazy val plugin = project
.in(file("sbt-Something"))
.dependsOn(lib)
.settings(common: _*)
.settings(name := "My plugin",
sbtPlugin := true)
lazy val examples = project
.in(file("examples"))
.dependsOn(lib, plugin)
.settings(common: _*)
.settings(name := "Examples")
如何将plugin
作为插件添加到项目examples
?
答案 0 :(得分:1)
我认为你不能在与正在使用它的项目相同的“级别”拥有插件。
如果你想到它,插件必须在编译正在使用它的项目之前可用。这是因为它可能会修改构建设置,这会影响项目的构建方式。
如果要将插件保留在项目中,可以通过在project/project
目录中声明项目来实现。
lazy val plugin = project
.in(file("sbt-plugin"))
.dependsOn(lib)
.settings(name := "My plugin", sbtPlugin := true)
lazy val lib = project.in(file("lib"))
lazy val root = project.in(file(".")).dependsOn(plugin)
然后,您可以将代码放到sbt-plugin
目录,将共享库代码放到lib
文件夹中。
在正常构建中,您可以引用共享库和插件。
val lib = ProjectRef(file("project/lib"), "lib")
val root = project.in(file(".")).dependsOn(lib).enablePlugins(MyPlugin)
请注意,将共享库作为一个单独的项目保留可能会更好,因为我认为这种设置可能有点棘手。例如,如果您在共享库中更改某些内容,则主项目应重新编译并应使用新代码。但是,插件只会在项目上发出reload
命令后使用新代码。
如果您想在项目之间共享设置,可以查看How to share version values between project/plugins.sbt and project/Build.scala?
的答案