我正在尝试为(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工件时聚合不同的项目集?
答案 0 :(得分:1)
似乎没有直接的方法来做到这一点。作为一种变通方法,您可能希望通过spark
的{{1}}为空,并在libraryDependencies
为2.12时跳过compile
和publish
来获得类似的效果:< / 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 skip
:Task
对于支持它的任务(目前只有
Boolean
,compile
和update
),将publish
设置为skip
会强制执行任务做它的工作。这种确切的语义可能因任务而异。
但是,与true
和compile
相比,publish
在这里不起作用。来自sbt Reference Manual:
- 覆盖以上所有内容,
醇>skip in update := scalaBinaryVersion.value == "2.12"
会告诉sbt永远不会执行解析。 ...另外,(请注意)如果自上次清理后仍未允许运行分辨率,则更新本身将立即失败。