我正在尝试构建一个由多个项目聚合的 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")
Run Code Online (Sandbox Code Playgroud)
如何将plugin作为插件添加到项目中examples?
我认为您不能在使用它的项目的同一“级别”上拥有一个插件。
如果您想到的话,该插件必须在使用它的项目编译之前可用。这是因为它可能会修改构建设置,这会影响项目的构建方式。
如果您想将插件保留在项目中,可以通过在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)
Run Code Online (Sandbox Code Playgroud)
然后,您可以将代码放入sbt-plugin目录,并将共享库代码放入lib文件夹。
在正常构建中,您可以引用共享库和插件。
val lib = ProjectRef(file("project/lib"), "lib")
val root = project.in(file(".")).dependsOn(lib).enablePlugins(MyPlugin)
Run Code Online (Sandbox Code Playgroud)
请注意,也许将共享库作为一个单独的项目更好,因为我认为这个设置可能有点棘手。例如,如果您更改共享库中的某些内容,主项目应重新编译并应使用新代码。reload然而,该插件仅在对项目发出命令后才会使用新代码。
如果您想在项目之间共享设置,您可以检查如何在project/plugins.sbt和project/Build.scala之间共享版本值的答案?
| 归档时间: |
|
| 查看次数: |
1351 次 |
| 最近记录: |