如何在 sbt 项目中使用 sbt 插件作为库依赖?
How to use sbt plugin as a library dependency in a sbt project?
我有一个使用多项目构建的 sbt 插件项目。我想将此插件用作其他 sbt 项目的依赖项。我已经创建了一个插件,但是当我将这个插件添加到项目中时,我似乎无法正确获取 link 的依赖项。
sbt-插件
build.sbt
name := "sbt-plugin"
sbtPlugin := true
val commonSettings = Seq(
organization := "com.example",
version := "1.0",
scalaVersion := "2.11.7",
javacOptions := Seq("-source", "1.8", "-target", "1.8"),
scalacOptions := Seq("-target:jvm-1.8", "-unchecked", "-deprecation", "-encoding", "utf8"))
lazy val plugin = (project in file("plugin"))
.settings(commonSettings: _*)
.settings(
name := "plugin"
)
lazy val root = (project in file("."))
.settings(commonSettings: _*)
.dependsOn(plugin)
.aggregate(plugin)
sbt-plugin\plugin\src\main\scala\com\example\Hello.scala
package com.example
// Sample code I would like to access from another sbt project
object Hello {
def show = println("Hello, world!")
}
插件测试
plugin-test 是我用来测试 sbt-plugin 的 sbt 项目
plugin-test\build.sbt
name := """plugin-test"""
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % "test"
fork in run := true
plugin-test\project\plugins.sbt
addSbtPlugin("com.example" % "sbt-plugin" % "1.0", "0.13","2.11")
plugin-test\src\main\scala\com\exam\Test.scala
package com.exam
object Test {
def result = com.example.Hello.show()
}
但是当我编译 plugin-test 项目时,它显示以下错误:
[error] E:\Play\SBT Plugin\sbt demo1\plugin-test\src\main\scala\com\exam\Test.scala:4: object example is not a member of package com
[error] def result = com.example.Hello.show()
[error] one error found
我在两个项目上都执行了本地发布和 plugin/publish-local,并且工件正确解析。
我将 sbt-plugin 添加到 plugins.sbt
并编译了项目,但是 Test.scala
无法编译并出现上述错误,就好像依赖项不存在一样。
我在这里错过了什么?
当您将插件指定为 addSbtPlugin
时,您只是将其添加到构建环境(即在 build.sbt
中执行操作),而不是在应用程序的类路径中(在 src/main/...
).
在您的情况下,您需要将其用作常规依赖项。
我有一个使用多项目构建的 sbt 插件项目。我想将此插件用作其他 sbt 项目的依赖项。我已经创建了一个插件,但是当我将这个插件添加到项目中时,我似乎无法正确获取 link 的依赖项。
sbt-插件
build.sbt
name := "sbt-plugin"
sbtPlugin := true
val commonSettings = Seq(
organization := "com.example",
version := "1.0",
scalaVersion := "2.11.7",
javacOptions := Seq("-source", "1.8", "-target", "1.8"),
scalacOptions := Seq("-target:jvm-1.8", "-unchecked", "-deprecation", "-encoding", "utf8"))
lazy val plugin = (project in file("plugin"))
.settings(commonSettings: _*)
.settings(
name := "plugin"
)
lazy val root = (project in file("."))
.settings(commonSettings: _*)
.dependsOn(plugin)
.aggregate(plugin)
sbt-plugin\plugin\src\main\scala\com\example\Hello.scala
package com.example
// Sample code I would like to access from another sbt project
object Hello {
def show = println("Hello, world!")
}
插件测试
plugin-test 是我用来测试 sbt-plugin 的 sbt 项目
plugin-test\build.sbt
name := """plugin-test"""
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % "test"
fork in run := true
plugin-test\project\plugins.sbt
addSbtPlugin("com.example" % "sbt-plugin" % "1.0", "0.13","2.11")
plugin-test\src\main\scala\com\exam\Test.scala
package com.exam
object Test {
def result = com.example.Hello.show()
}
但是当我编译 plugin-test 项目时,它显示以下错误:
[error] E:\Play\SBT Plugin\sbt demo1\plugin-test\src\main\scala\com\exam\Test.scala:4: object example is not a member of package com
[error] def result = com.example.Hello.show()
[error] one error found
我在两个项目上都执行了本地发布和 plugin/publish-local,并且工件正确解析。
我将 sbt-plugin 添加到 plugins.sbt
并编译了项目,但是 Test.scala
无法编译并出现上述错误,就好像依赖项不存在一样。
我在这里错过了什么?
当您将插件指定为 addSbtPlugin
时,您只是将其添加到构建环境(即在 build.sbt
中执行操作),而不是在应用程序的类路径中(在 src/main/...
).
在您的情况下,您需要将其用作常规依赖项。