【发布时间】:2014-06-24 19:59:25
【问题描述】:
我有一个带有几个子项目的 sbt 项目,每个子项目都发布了一些工件并有一个相当广泛的测试套件。
当我在 CI 服务器上运行构建时,我想将工件发布到暂存位置并在发布任务之后运行测试。由于其他人可能想要工件,我想告诉 sbt 我希望它为所有子项目构建所有工件,然后运行所有测试,因为默认情况下它似乎交错运行它们一个未指定的顺序。
我有一个ScopeFilter 允许我访问我的所有子项目,因此我可以使我的ciBuild 任务依赖于以下内容
(test in Test).all(subprojectScopeFilter).dependsOn(myArtifactsTask.all(subprojectScopeFilter))`
但是,这似乎对订单没有任何实际影响,而且我肯定看到一些子项目在其他人运行 myArtifactsTask 之前运行测试。我猜我不完全理解all 的工作原理,可能是说每个独立子项目的test 任务都依赖于同一个子项目的myArtifactsTask?如果是这种情况,我该如何指定我想要的?它是否记录在我错过的某个地方?该手册描述了all 的基础知识,但没有描述它如何与其他构造交互。
【问题讨论】:
-
你的
myArtifactsTask打电话给assembly吗?你有没有通过例如禁用它?test in assembly := {}? -
@lpiepiora 你能详细说明那会做什么吗?我没有禁用它,但我不太明白它会如何改变。
-
抱歉,我太快下结论了。我想也许你的一些任务已经调用了测试,而 SBT 只评估一个任务键一次。但是我认为 SBT 会抱怨循环依赖。我会发布一个答案,希望能在几分钟内解决您的问题。