sbt维护任务之间的依赖关系,并且可以非常容易地推断出结果图.另一方面,略读源代码,似乎增量编译逻辑更加不透明.我希望能够做到以下几点:
>说相当于“如果我以这种方式修改了这个界面,会失效的是什么?”
>构建一个图表,说明修改不同类接口如何影响构建的其余部分.考虑到Scala中隐式依赖项的复杂程度,绘制scala导入依赖项并不是特别好的近似.似乎sbt必须以某种形式维护这些信息以进行渐进式编译,因此我“只是”需要弄清楚如何访问它并希望它的形式适合我的用例.
这些都是可行的吗?我不反对写sbt插件,但会欣赏有关如何继续的提示.
编辑:它看起来像Relation的usesInternalSrc(dep:File):Set [File]可能很有希望.这是否捕获了所有sbt的依赖性知识?
编辑2:更有希望,在sbt源代码树中有一个DotGraph对象.它没有文档,谷歌没有任何人类可读的文字.如果我能弄清楚如何使用它,我会发一个答案.
解决方法
示例控制台项目会话:
> val (s,a) = runTask(compile in Compile,currentState) > DotGraph.sources(a.relations,file("source-graph"),Nil)
source-graph是一个包含两个点文件的目录,一个包含源依赖项,另一个包含二进制文件.您也可以直接与问题中建议的Relations类型的关系进行交互,并且可以捕获所有sbt的依赖性知识.在0.13中,还将提供有关哪些依赖项继承自另一个源文件中的内容的信息.
就修改源文件如何影响失效而言,它非常粗糙.对任何非私有签名的任何更改都会将源标记为已更改.在0.12及更早版本中,这至少会使直接依赖性无效,甚至更多.在0.13中,这将仅使直接依赖项无效,但继承的依赖项除外,它们是传递无效的.当修改源文件的非私有API时,目前无法查看将失效的内容.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。