我想在SBT中执行以下操作:
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, 11)) =>
case Some((2, 10)) =>
}
但我不想将其分配给任何内容,我只想根据当前交叉版本的值运行一些代码。
我可以创建一个Task然后执行任务,但是我可以在不需要任务的情况下执行此操作吗?
答案 0 :(得分:1)
我知道你已经说过你不想创建一个任务,但我会说这是最干净的方式,所以我将其发布为无论如何,解决方案。
val printScalaVersion = taskKey[Unit]("Prints Scala version")
printScalaVersion := {
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, 11)) => println("2.11")
case Some((2, 10)) => println("2.10")
case _ => println("Other version")
}
}
compile in Compile := ((compile in Compile) dependsOn printScalaVersion).value
如果您真的不想创建新任务,可以重新定义编译任务并在那里添加代码(我认为它不像上面的解决方案那样干净)。
compile in Compile := {
val analysis = (compile in Compile).value
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, 11)) => println("2.11")
case Some((2, 10)) => println("2.10")
case _ => println("Other version")
}
analysis
}
答案 1 :(得分:0)
只是一个小小的"增强" @lpiepiora提供的内容。
可能会有一个设置,其中包含CrossVersion.partialVersion(scalaVersion.value)
的值,如下所示:
lazy val sv = settingKey[Option[(Int, Int)]]("")
sv := CrossVersion.partialVersion(scalaVersion.value)
使用以下设置:
> sv
[info] Some((2,10))
> ++ "2.9.3"
[info] Setting version to 2.9.3
[info] Set current project to projectA (in build file:/C:/dev/sandbox/scalaVersionSetting/)
> sv
[info] Some((2,9))
> ++ "2.10.4"
[info] Setting version to 2.10.4
[info] Set current project to projectA (in build file:/C:/dev/sandbox/scalaVersionSetting/)
> sv
[info] Some((2,10))
> ++ "2.11"
[info] Setting version to 2.11
[info] Set current project to projectA (in build file:/C:/dev/sandbox/scalaVersionSetting/)
> sv
[info] Some((2,11))
......等等。
这样可以设置为case
。
lazy val printScalaVersion = taskKey[Unit]("Prints Scala version")
printScalaVersion := {
sv.value foreach println
}