sbt - 如何根据 sbt 中的 crossScalaVersions 更改 unmanagedBase
问题描述
我必须根据使用的 Scala 版本使用不同的非托管 jar 文件。可以使用 built.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 不会改变。这个怎么安排?
解决方案
您可以阅读当前主要/次要版本的 ScalascalaBinaryVersion.value
并直接使用它:
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
如果您指的是任务)。
推荐阅读
- python - 基于“Channel LSTM”的基于 LSTM 的 EEG 信号分类架构
- git - git 中的作者/提交者数据不尊重 GIT_CONFIG 变量
- javascript - 如何更改 Tabulator.js 中标题复选框的行为?
- python - 如何通过计算将字符串转换为日期?
- amazon-web-services - 我应该将哪些指标用于警报 HTTPCode_Target_5XX_Count 或 HTTPCode_ELB_5XX_Count?
- jquery - Jquery - 仅当存在新图像时才会更改鼠标悬停图像
- python - 对象没有属性python,spotify api
- android - 在 Android Studio 上,如何使 ArrayList 接收来自不同活动的信息并将其显示在 RecyclerView 中,并为每个输入创建一个新行?
- azure - 在本地开发中使用 azure KeyVault
- python - Python从位于url的图像计算phash