0

我的示例 sbt 插件使用 scala 版本 2.10.6 可以正常编译。我正在尝试升级 sbt 插件 build.sbt 中的 scalaVersion := "2.11.7"。

它与以下 CTE 中断:-

/Users/mogli/gitrepos/study/SbtPlugins/ScalaPlugin/src/main/scala/base/BasePlugin.scala:21:无法扩展以前版本的Scala编译的宏[错误]
val projects = thisProject.value.dependencies

正如 Micro Dotta 在下面的问题中所建议的那样,这与 scalaVersion := "2.10.6" 一起工作得很好:-

访问 sbt 插件中的依赖(非子)项目

简化的 sbt 插件 BasePlugin.scala:

package base

import sbt.{ThisBuild, Def, TaskKey, AutoPlugin}
import sbt._
import Keys._


object BasePlugin extends AutoPlugin {

  object autoImport {
    lazy val customtask: TaskKey[Unit] = TaskKey("customtask")
  }

  import autoImport.customtask


  override def projectSettings: Seq[Def.Setting[_]] = Seq(
    customtask := {
      val projects = thisProject.value.dependencies
      projects map println
    }
  )
}

如何让它与 scalaVersion := "2.11.7" 一起工作?我希望这个插件与使用 scal 版本 11 的项目一起使用。

4

2 回答 2

0

尝试这个:

  override def projectSettings: Seq[Def.Setting[_]] = Seq(
        customtask := {
          val projects = thisProject.value.dependencies
          projects map println
        },
        scalaVersion := "2.11.7"
      )
于 2017-10-16T01:16:49.347 回答
0

SBT 构建定义通过它们使用的 sbt 版本与 scala 版本相关联:

  • sbt 0.12.x 构建定义和代码必须针对 scala 2.9.x 进行编译
  • sbt 0.13.x 构建定义和代码必须针对 scala 2.10.x 进行编译

因为 1.0.0 sbt 是针对 scala 版本 2.12 编译的,并且需要 Java 8

所以,

没有可以使用 scala 2.11 编译 sbt 构建定义的 sbt 版本(至少不是没有风险的错误)。

您可以通过将其设置为来操纵您正在使用的 sbt 版本project/build.properties

sbt.version=1.0.0

确保使用当前的 sbt 包装脚本。

于 2017-10-16T07:29:21.307 回答