代码之家  ›  专栏  ›  技术社区  ›  shadow chris

基于scala二进制版本聚合不同模块

  •  2
  • shadow chris  · 技术社区  · 8 年前

    我正在尝试为(2.11,2.12)交叉构建一个项目,其中一些子项目不应该为2.12构建,因为它们的可传递依赖项尚未为2.12发布。特别是Scala 2.12的Spark。根项目的聚合如下所示

    lazy val root = (project in file(".")).
      aggregate(vegas, spark, flink, macros).
      settings(commonSettings: _*).
      settings(noPublishSettings: _*)
    

    有没有办法检测 scalaBinaryVersion #aggregate 如果crossbuild试图生成2.12工件,那么聚合一组不同的项目?

    1 回复  |  直到 8 年前
        1
  •  1
  •   dkim    8 年前

    似乎没有直接的方法可以做到这一点。作为一种解决方法,您可能希望通过 spark libraryDependencies 清空并跳过 compile publish 什么时候 scalaBinaryVersion is 2.12:

    // tested on sbt 1.1.0
    
    lazy val spark = (project in file("spark"))
      .settings(
        // ... other settings ...
    
        // Empty out libraryDependencies when scalaBinaryVersion is 2.12.
        libraryDependencies :=
          (if (scalaBinaryVersion.value == "2.12") Seq.empty else libraryDependencies.value),
    
        // Skip compilation and publishing when scalaBinaryVersion is 2.12.
        skip in compile := scalaBinaryVersion.value == "2.12",
        skip in publish := scalaBinaryVersion.value == "2.12"
      )
    

    这个 skip 任务键允许我们跳过一些任务。从…起 inspect skip :

    Task : Boolean

    对于支持它的任务(当前仅限 编写 , update 出版 ),设置 跳过 true 将强制任务不执行其工作。这种确切的语义可能因任务而异。

    然而,与 编写 出版 , skip in update := scalaBinaryVersion.value == "2.12" 在这里不起作用。从…起 sbt Reference Manual :

    1. 覆盖所有上述内容, skip in update := true 将告诉sbt永远不要执行解决。。。此外,(请注意)如果自上次清理后未允许运行解析,则更新本身将立即失败。