如何从特定项目的交叉构建的sbt多项目中删除scala版本

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从特定项目的交叉构建的sbt多项目中删除scala版本相关的知识,希望对你有一定的参考价值。

我在一个多项目sbt中有一个scala交叉构建设置。在其中一个项目中,我试图禁用针对其中一个scala版本的构建,因为它依赖于2.10上不支持的akka​​-http。

我试图从crossScalaVersions字段中删除特定版本,但sbt仍尝试针对2.10构建它。我怀疑这是因为这个项目依赖于另一个与2.10交叉构建的兄弟项目

sbt看起来像这样(缩写为易读性):

lazy val commonSettings = Seq(
........... Common settings ................
)

// aggregate root project
lazy val root = project.in(file(".")).aggregate(
  anotherSiblingProject,
  service
).settings(commonSettings)

lazy val anotherSiblingProject: Project = project.in(file("anotherSiblingProject"))
  .settings(
    commonSettings,
    crossScalaVersions := Seq("2.10.4", "2.11.11", "2.12.2"), <<<< BUILDS AGAINST ALL OF THESE
  )


// WANT TO REMOVE THE CROSS BUILD FOR THiS
lazy val service: Project = project.in(file("service"))
  .dependsOn(anotherSiblingProject)
  .settings(
    commonSettings,
    crossScalaVersions := Seq("2.11.11"), <<<<<< ONLY WANT TO BUILD AGAINST THIS VERSION
    libraryDependencies ++= Seq(
      "com.typesafe.akka" %% "akka-http" % "10.1.4",
      "com.typesafe.akka" %% "akka-stream" % "2.5.12",
      "com.typesafe.akka" %% "akka-http-spray-json" % "10.1.4",
      "com.typesafe.scala-logging" %% "scala-logging" % "3.4.0"
    )
)
答案

我想你在scalaVersioncommonSettings。所以你可以从crossScalaVersions中删除service并显式编译像sbt '++ 2.11.11 anotherSiblingProject/compile' 'service/compile'这样的服务

以上是关于如何从特定项目的交叉构建的sbt多项目中删除scala版本的主要内容,如果未能解决你的问题,请参考以下文章

如何通过将 sbt-plugin 用作多项目构建中的依赖项来访问它的子项目?

SBT:多构建依赖/聚合项目中的覆盖设置

如何为 appJS/appJVM 交叉构建项目运行 scala sbt-native-packager

使用 sbt 进行多项目构建

为啥我在一个环境中的 sbt 中出现冲突的交叉版本,而在另一个环境中却没有?

SBT 多项目构建中的 build.properties