使用scala版本2.11.7访问sbt插件中的依赖(非子)项目

时间:2017-10-13 12:06:23

标签: dependencies sbt sbt-plugin

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

它打破了以下CTE: -

  

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

这与scalaVersion:=" 2.10.6"正如Micro Dotta在下面的问题中所建议的: -

accessing dependent (not child) projects in sbt plugin

Simplified 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的项目。

2 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分: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

所以,

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

您可以通过在project/build.properties中设置它来操纵您正在使用的sbt版本:

sbt.version=1.0.0

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