根据scala二进制版本

时间:2018-02-06 23:58:36

标签: scala sbt

我正在尝试为(2.11,2.12)交叉构建一个项目,其中一些子项目不应该为2.12构建,因为它们的传递依赖性尚未针对2.12发布。特别是Spark for Scala 2.12。根项目的聚合看起来像

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

是否有某种方法可以检测scalaBinaryVersion中的#aggregate并在交叉构建尝试生成2.12工件时聚合不同的项目集?

1 个答案:

答案 0 :(得分:1)

似乎没有直接的方法来做到这一点。作为一种变通方法,您可能希望通过spark的{​​{1}}为空,并在libraryDependencies为2.12时跳过compilepublish来获得类似的效果:< / p>

scalaBinaryVersion

// 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 skipTask

     

对于支持它的任务(目前只有Booleancompileupdate),将publish设置为skip会强制执行任务做它的工作。这种确切的语义可能因任务而异。

但是,与truecompile相比,publish在这里不起作用。来自sbt Reference Manual

  
      
  1. 覆盖以上所有内容,skip in update := scalaBinaryVersion.value == "2.12"会告诉sbt永远不会执行解析。 ...另外,(请注意)如果自上次清理后仍未允许运行分辨率,则更新本身将立即失败。
  2.