gpt4 book ai didi

sbt - 如何让SBT跳过交叉编译给定的子项目?

转载 作者:行者123 更新时间:2023-12-04 04:17:05 27 4
gpt4 key购买 nike

我遇到了一些与SBT相关的案例,这让我感到很困惑。当您交叉编译时,是否有一种方法可以告诉SBT完全跳过某些scala版本的子项目?

这是两个有用的示例。

1)具有三个项目A,B和C的构建。A和B都是scala项目,并且在其设置中具有'scalaVersions++ = Seq(“2.11.2”,“2.10.4”)。 Project C是纯Java工件,因此我从其依赖项中排除了Scala库。我希望A和B依赖C,但是理想情况下,我只想构建C一次。如果我使用默认行为,并从根聚合器项目中进行“+发布”,则会得到两个C-1.0.0.jar副本,并且SBT尝试将其发布两次,这当然对于Maven存储库。

2)具有多个scala项目的构建,但是其中一个项目只能针对单个Scala版本进行构建。我尝试在该项目的设置中定义“scalaVersions”,以仅保留一个版本,而其他项目则拥有两个版本,但是再次由根聚合器“+发布”似乎忽略了该问题,并且仍然对其进行了两次编译,第二次失败,因为它的依赖项不适用于该Scala版本。该项目是依赖关系图中的叶节点,因此逻辑上做是一件非常好的事情。

对于案例2,我曾考虑过将“坏的” scala版本的源目录设置为/dev/null或类似的东西,但实际上仍会运行该构建并产生一个空工件。我知道我可能可以进入并找到所有相关的 key ,然后执行类似的操作

publishArtifact := if(scalaBinaryVersion.value == "2.10") false else publishArtifact.value

然后搜寻所有其他相关的设置/任务(编译,在Test中进行编译,在Test中进行测试,packageBin等),但这似乎有些骇人听闻。某处是否有“跳过”设置?

最佳答案

我写了sbt-doge来解决跨子项目的任务聚合问题,尊重其crossScalaVersions。对于Java项目,您可能需要一个虚拟的crossScalaVersion条目。

关于sbt - 如何让SBT跳过交叉编译给定的子项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com