sbt维护任务之间的依赖关系,并且可以相当容易地推断出结果图。另一方面,略读源代码,似乎增量编译逻辑更加不透明。我希望能够做到以下几点:
这些都可行吗?我并不反对写sbt插件,但会欣赏有关如何继续的提示。
编辑:看起来Relation
的{{1}}可能很有希望。这是否捕获了所有sbt的依赖性知识?
编辑2:更有希望的是,sbt源代码树中有一个usesInternalSrc(dep: File): Set[File]
对象。它没有文档,谷歌没有任何人类可读的文字。如果我能弄清楚如何使用它,我会发一个答案。
答案 0 :(得分:3)
示例console-project
会话:
> val (s, a) = runTask(compile in Compile, currentState)
> DotGraph.sources(a.relations, file("source-graph"), Nil)
source-graph
是一个包含两个点文件的目录,一个包含源依赖项,另一个包含二进制文件。您也可以直接与问题中建议的类型Relations的a.relations
进行交互,并且可以捕获所有sbt的依赖性知识。在0.13中,还将提供有关从其他源文件中的某些内容继承的依赖关系的信息。
就修改源文件如何影响失效而言,它非常粗糙。对任何非私有签名的任何更改都会将源标记为已更改。在0.12及更早版本中,这至少会使直接依赖性无效,甚至更多。在0.13中,这将仅使直接依赖项无效,但继承的依赖项除外,它们是传递无效的。当修改源文件的非私有API时,目前无法查看将失效的内容。