SBT基于值执行代码
我想在SBT中执行以下操作:SBT基于值执行代码,sbt,Sbt,我想在SBT中执行以下操作: CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, 11)) => case Some((2, 10)) => } 但我不想把它分配给任何东西,我只想基于当前交叉版本的值运行一些代码 我可以创建一个任务,然后执行该任务,但我可以不需要该任务就执行吗?我知道你说过你不想创建任务,但我认为这是最干净的方法,所以我还是将其作为解决方案之一发布 依赖于编译 重写编
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((2, 11)) =>
case Some((2, 10)) =>
}
但我不想把它分配给任何东西,我只想基于当前交叉版本的值运行一些代码
我可以创建一个任务,然后执行该任务,但我可以不需要该任务就执行吗?我知道你说过你不想创建任务,但我认为这是最干净的方法,所以我还是将其作为解决方案之一发布 依赖于编译 重写编译任务 如果您真的不想创建新任务,可以重新定义编译任务并在那里添加代码(我认为它没有上面的解决方案那么干净) 只是@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
}
您希望这段代码什么时候运行(我的意思是在什么时候加载,通过另一个tasak,等等)?我猜这是构建的一部分。那么让我们假设默认编译阶段何时运行。为什么有时人们使用taskKey,而有时使用taskKey?嗯,
taskKey
是一个宏,taskKey
是一个对象。如果这是一个为什么的问题,我不知道;)。当我谈到build.sbt
时,我通常选择taskKey
,当build.scala
时,我选择taskKey
,但我认为这并不重要。taskKey
更短,因为您不必指定任务名称,因为它将从val
中提取任务。啊,是的,我明白了。taskKey是一个从val生成名称的宏。Ok干杯。我喜欢你的解决方案。使用这个任务比我想象的要好。为什么这个任务不仅仅是一个设置?@JacekLaskowski我想你说的是taskKey[Unit](“打印Scala版本”)
。OP在评论中表示,他希望以编译任务的方式运行它。您不能依赖于键。如果您认为这是有意义的,如果在加载时对键进行评估,那么您为什么需要依赖它们呢?当您的任务运行时,它们已被评估。
> 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))
lazy val printScalaVersion = taskKey[Unit]("Prints Scala version")
printScalaVersion := {
sv.value foreach println
}