加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 08:48:35 所属栏目:安全 来源:网络整理
导读:sbt维护任务之间的依赖关系,并且可以非常容易地推断出结果图.另一方面,略读源代码,似乎增量编译逻辑更加不透明.我希望能够做到以下几点: 说相当于“如果我以这种方式修改了这个界面,会失效的是什么?” 构建一个图表,说明修改不同类接口如何影响构建的其余
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时,目前无法查看将失效的内容.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读