首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么scalac需要类路径上的传递依赖项?

为什么scalac需要类路径上的传递依赖项?
EN

Stack Overflow用户
提问于 2017-01-12 04:43:17
回答 1查看 181关注 0票数 2

我遇到了一个意想不到的(只为我自己?)ScalaC行为。

下面是我在尝试将代码库从maven迁移到bazel时看到的一个问题的再现。此迁移的主要焦点之一是尝试最小化每个类在编译时所需的依赖性,以便只有在需要时才会触发构建。

不幸的是,我看到的是,给定ClassIndirectlyNeedingFoo(uses)->ClassUsingFoo(uses)->Supplier,如果Supplier不在类路径上,ClassIndirectlyNeedingFoo的编译就会中断。完整的细节在这里(https://github.com/ittaiz/scalac-troubleshooting)。

如果有人知道scalac为什么会这样,我会非常感激。

谢谢!

顺便说一句,供应商不在ClassIndirectlyNeedingFoo的源代码或字节码中...

EN

回答 1

Stack Overflow用户

发布于 2017-01-16 04:44:24

好的,所以简短的答案是Whyanyone来说并不是完全清楚的(参见#4)。很清楚的是,众所周知,scalac有时需要比人们想象的更多的依赖项,而且很明显,当这种情况发生时,它是一个bug

此外,从与Jason Zaugg在Gitter上的讨论中,他似乎认为我的上述问题只是像上面链接的错误家族的一部分。

正如赛斯在评论中所链接的那样,ScalaCenter已经接受了一个proposal (original PR)来澄清这一领域。

与这个问题最相关的是那里的四个建议:

  1. 对存根错误的用户体验的改进,以Statement为中心:它们是预期的常见情况,而不是导致存根错误的案例数量的罕见、意外或致命的情况...即,允许更多当前导致存根错误的用例成功编译,从而允许更少的直接dependencies.
  2. A编译器标志在编译期间需要对所有符号(包括源代码中未提及的符号)使用import语句。对于-Ywarn-unused-imports的对称性,此选项可能称为-Ywarn-undeclared-imports。它将主要帮助进行从可传递到直接依赖的转换,而不是帮助维护已经使用直接依赖的构建。(正如@posco和Scala语言规范的@adriaanm)
  3. An扩展所建议的那样,列出来自另一个编译单元的符号必须出现在类路径上的所有情况,包括: 1)子类化,2)超类的公共方法的返回类型,3)直接引用,4)

虽然我不知道这项工作什么时候会开始,但继续进行#3是agreed的。

Eugeene Burmako是该提案的合著者之一,他开始制作solution的原型,我在此基础上制作了一个小型change

现在,这将解决我的问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41600346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档