我正在尝试创建一个带有新AutoPlugin功能的sbt插件,但失败了。
所有代码都在这里:
build.sbt
sbtPlugin := true
name := "my-sbt-plugin"
version := "0.1.0"
organization := "test20140913"project/MySbtPlugin.scala
import sbt._
object MySbtPlugin extends AutoPlugin {
object autoImport {
lazy val hello = taskKey[Unit]("hello task from my plugin")
}
import autoImport._
val helloSetting = hello := println("Hello from my plugin")
override def projectSettings = Seq(
helloSetting
)
}project/build.scala
import sbt._
object MySbtPluginBuild extends Build {
lazy val root = project.in(file("."))
root.enablePlugins(MySbtPlugin)
}当我在上面运行sbt时,它会报告一个错误:
[info] Done updating.
[info] Compiling 2 Scala sources to /myplugin/project/target/scala-2.10/sbt-0.13/classes...
/sbttest/myplugin/build.sbt:0: error: '.' expected but eof found.
import _root_.sbt.plugins.IvyPlugin, _root_.sbt.plugins.JvmPlugin, _root_.sbt.plugins.CorePlugin, _root_.sbt.plugins.JUnitXmlReportPlugin, MySbtPlugin回购
您可以克隆它:https://github.com/freewind/my-sbt-plugin,然后运行./sbt来复制它
发布于 2014-09-14 04:20:19
最后,我修复了插件,您可以在这里看到更新的代码:https://github.com/freewind/my-sbt-plugin
问题中有几个问题:
project/build.scala。enablePlugins的部分只需要添加到使用此插件的项目中,不应该在插件项目本身中添加。sbt 0.13.5(我在问题中使用),插件必须在包中,不能是顶级插件。此问题已在sbt 0.13.6中解决。trigger),我们必须将build.sbt或Build.scala中的enablePlugins部分添加到使用此插件的项目中。target之前,您需要删除sbt的dirs(例如target/或project/target)。否则你会有很多奇怪的问题。发布于 2014-09-13 19:17:47
sbt中的Project是不变的,即所有的方法都对它进行了转换。Sbt会反思广益地查找您在值上定义的项目。
基本上:
project/build.scala
import sbt._
object MySbtPluginBuild extends Build {
lazy val root = project.in(file("."))
// here you're constructing a new project instance which is ignored.
root.enablePlugins(MySbtPlugin)
}您所要做的就是将您的项目DSL链接在一起,并将结果分配到val中,这是sbt关注的唯一事项:
import sbt._
object MySbtPluginBuild extends Build {
lazy val root = project.in(file(".")).enablePlugins(MySbtPlugin)
}https://stackoverflow.com/questions/25825423
复制相似问题