gpt4 book ai didi

sbt - 使用 SBT 进行多版本构建

转载 作者:行者123 更新时间:2023-12-04 11:25:51 25 4
gpt4 key购买 nike

我想在 SBT 中实现以下构建:

  • 拥有多个 Scala 版本
  • 有多个目标版本(因为依赖库)

  • 以1.0、2.0、3.0和Scala 2.92、2.10.2版本中存在的外部Lib为例,我想编译、组装和发布:
  • MyProject_externalLib1.0_scala_2.9.2
  • MyProject_externalLib1.0_scala_2.10.2
  • MyProject_externalLib2.0_scala_2.9.2
  • MyProject_externalLib2.0_scala_2.10.2
  • MyProject_externalLib3.0_scala_2.9.2
  • MyProject_externalLib3.0_scala_2.10.2

  • 但是,默认情况下,我希望在单个版本中工作。只有当我启动一个发布过程时,所有的版本才应该被编译、测试和组装。

    有没有一种简单的方法可以在 Sbt 中实现这种多版本构建?

    最佳答案

    十字楼

    在 sbt 中拥有多个 Scala 版本是相当普遍的,这被称为交叉构建或交叉发布。见 sbt 的 Cross-building page详情。您所要做的就是:

    scalaVersion := "2.10.2"

    crossScalaVersions := Seq("2.10.2", "2.9.2")

    根据 sbt 的命名约定,您发布的工件将具有二进制版本后修复,即 _2.10适用于 Scala 2.10.x 和 _2.9.2对于 Scala 2.9.2。这是为了利用 2.10 系列之间的二进制兼容性。您可以使用 crossVersion来控制那个方面。

    与外部库交叉构建

    针对外部库的交叉构建有点棘手。我能想到的衣柜情况是 a plugin for Dispatch .在那里,我创建了一个名为 dispatchVersion 的自定义设置。 :
    lazy val dispatchVersion = SettingKey[String]("x-dispatch-version")

    这是在 buildSettings 中设置的作为
    dispatchVersion := "0.10.1"

    和我的版本前缀 dispatch0.10.0_ :
    version <<= dispatchVersion { dv => "dispatch" + dv + "_0.1.0" }

    以下是使用 key 添加依赖项的方法:
    libraryDependencies <++= (dispatchVersion) { (dv) => Seq(
    "net.databinder.dispatch" %% "dispatch-core" % dv,
    "net.databinder.dispatch" %% "dispatch-json4s-native" % dv
    )}

    对于 Java 库,它应该是 %而不是 %% :
    libraryDependencies <++= (externalLibVersion) { (el) => Seq(
    "org.apache" % "foo" % el,
    "org.apache" % "foo-extention" % el
    )}

    除了制作像 sbt-cross-building 这样的自定义插件,没有简单的方法来迭代一系列外部版本。您可以编写如下的 shell 脚本:
    sbt "set externalLibVersion := \"1.0\"" +assembly "set externalLibVersion := \"2.0\"" +assembly "set externalLibVersion := \"3.0\"" +assembly

    关于sbt - 使用 SBT 进行多版本构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374362/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com