根据所使用的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不会被更改。怎么安排呢?
答案 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
任务)。