gpt4 book ai didi

scala - 绘制 sbt 的增量编译逻辑

转载 作者:行者123 更新时间:2023-12-01 02:25:00 25 4
gpt4 key购买 nike

sbt 维护任务之间的依赖关系,并且可以很容易地推断出结果图。另一方面,略读源代码,增量编译逻辑似乎更加不透明。我希望能够做以下事情:

  • 相当于“如果我[以这种方式]修改了这个界面,什么会失效?”
  • 构建一个图表,说明修改不同的类接口(interface)如何影响构建的其余部分。考虑到 Scala 中的隐式依赖关系有多复杂,绘制 scala 导入依赖关系并不是一个特别好的近似。似乎 sbt 必须以某种形式维护这些信息才能进行增量编译,所以我“只”需要弄清楚如何访问它并希望它的形式适合我的用例。

  • 这些都可行吗?我不反对编写 sbt 插件,但希望获得有关如何继续的提示。

    编辑:看起来像 RelationusesInternalSrc(dep: File): Set[File]可能很有希望。这是否捕获了 sbt 的所有依赖知识?

    编辑 2:更有希望,有一个 DotGraph sbt 源代码树中的对象。它没有文档,谷歌也没有任何关于它的人类可读文本。如果我能弄清楚如何使用它,我会发布一个答案。

    最佳答案

    sample console-project session :

    > val (s, a) = runTask(compile in Compile, currentState)
    > DotGraph.sources(a.relations, file("source-graph"), Nil)
    source-graph是一个包含两个点文件的目录,一个带有源依赖项,一个带有二进制文件。您也可以直接与 a.relations 互动类型 Relations ,正如问题中所建议的那样,它确实捕获了 sbt 的所有依赖知识。在 0.13 中,还将提供有关哪些依赖项是由于从另一个源文件中的某些内容继承而来的信息。

    就修改源文件如何影响失效而言,它是非常粗粒度的。对任何非私有(private)签名的任何更改都将源标记为已更改。在 0.12 及更早版本中,这至少会使直接依赖关系失效,甚至更多。在 0.13 中,这只会使直接依赖项无效,但继承的依赖项除外,它们会传递无效。目前没有办法看到当源文件的非私有(private) API 被修改时,什么会失效,除非这样做。

    关于scala - 绘制 sbt 的增量编译逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17240629/

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