如何根据SBT中的crossScalaVersions更改unmanagedBase

时间:2018-09-25 05:51:11

标签: sbt

根据所使用的Scala版本,我必须使用不同的非托管jar文件。可以使用build.sbt这样的

一次完成一个Scala版本
val defaultScalaVersion = "2.12.4"

scalaVersion := defaultScalaVersion // because I can't figure out how to read value

val majorMinor = {
  val versionRegex = "(\\d+)\\.(\\d+)\\.(\\d+)".r
  val versionRegex(major, minor, update) = defaultScalaVersion

  major + "." + minor
}

unmanagedBase := baseDirectory.value / ("lib-" + majorMinor)

但是,如果我需要使用类似的东西发布两个不同的版本

crossScalaVersions := Seq("2.11.11", "2.12.4")

当然,我的majorMinor和unmanagedBase不会被更改。怎么安排呢?

1 个答案:

答案 0 :(得分:0)

您可以使用scalaBinaryVersion.value阅读Scala当前的主要/次要版本,并直接使用它:

unmanagedBase := baseDirectory.value / s"lib-${scalaBinaryVersion.value}"

您还可以使用CrossVersion.partialVersion提取版本的主要/次要组成部分。因此,如果您想要版本的其他格式,则可以调整当前的解决方案:

lazy val majorMinor = Def.setting {
  CrossVersion.partialVersion(scalaVersion.value) match {
    case Some((major, minor)) => s"${major}-${minor}"
  }
}

unmanagedBase := baseDirectory.value / s"lib-${majorMinor.value}"

请注意,要能够在.value值定义中使用majorMinor,您需要使用Def.setting宏(如果要引用的是Def.task任务)。