【问题标题】:In sbt, how can I cross-build with dependencies that are not required in one version?在 sbt 中,如何使用一个版本中不需要的依赖项进行交叉构建?
【发布时间】:2017-05-15 04:07:43
【问题描述】:

我需要使用 Scala 2.10 和 2.11(最终还包括 2.12)交叉构建一个项目。一些属于 2.10 的包,例如 parser-combinators,在 2.11 中是独立打包的。因此,它们不需要在 2.10 构建中提及,但在 2.11 中是必需的。此外,可能有多个这样的包,需要使用一个通用版本。

我发现documentation re: cross-building on the SBT site 在这里有点缺乏帮助。而且,虽然有几个 StackOverflow Q&A 与这个主题相关,但我找不到一个解决这个特定问题的问题。

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    解决方法如下(只显示build.sbt的相关部分):

    scalaVersion := "2.10.6"
    crossScalaVersions := Seq("2.10.6","2.11.8")
    
    val scalaModules = "org.scala-lang.modules"
    val scalaModulesVersion = "1.0.4"
    
    val akkaGroup = "com.typesafe.akka"
    lazy val akkaVersion = SettingKey[String]("akkaVersion")
    lazy val scalaTestVersion = SettingKey[String]("scalaTestVersion")
    
    akkaVersion := (scalaBinaryVersion.value match {
      case "2.10" => "2.3.15"
      case "2.11" => "2.4.1"
    })
    scalaTestVersion := (scalaBinaryVersion.value match {
      case "2.10" => "2.2.6"
      case "2.11" => "3.0.1"
    })
    
    libraryDependencies ++= (scalaBinaryVersion.value match {
      case "2.11" => Seq(
        scalaModules %% "scala-parser-combinators" % scalaModulesVersion,
        scalaModules %% "scala-xml" % scalaModulesVersion,
        "com.typesafe.scala-logging" %% "scala-logging" % "3.4.0"
      )
      case _ => Seq()
    }
    )
    
    libraryDependencies ++= Seq(
      akkaGroup %% "akka-actor" % akkaVersion.value % "test",
      "org.scalatest" %% "scalatest" % scalaTestVersion.value % "test"
    )
    

    请注意,此解决方案还解决了如何根据二进制版本设置依赖项版本的问题。我认为这可能会在 Stackoverflow 的其他地方得到解决,但在这里它们都在同一个地方。

    【讨论】:

    • 匹配 scalaBinaryVersion 作为字符串对于普通版本的 Scala 来说已经足够了,但会在里程碑、候选发布、夜间等情况下中断。要完全正确,请使用例如CrossVersion.partialVersion(scalaBinaryVersion.value) match { case Some((2, 10)) => ...
    • 另外,您在这里处理 Scala 模块的方式没有意义。 scala-xml 1.0.4 和 scala-parser-combinators 1.0.4 完全没有任何关系;这些是完全独立的库,具有独立的发布时间表和版本编号。例如,请注意 Scala 2.12.1 附带 scala-parser-combinators 1.0.4 和 scala-xml 1.0.6。
    • 谢谢,@SethTisue。我明白你所说的关于 scale-xml 和 scala-parser-combinators 的内容,但我想展示一个示例,说明两个包可能相关的位置(实际上并没有合适的包)。但是,我确实将它们放在了相同的版本中,因为否则我会收到有关驱逐的警告。我意识到我可以用另一种方式解决这些问题。无论如何,感谢您的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多