2017-01-11 60 views
2

我遇到意外(僅適用於我?)ScalaC行爲。
TL; DR是以下內容是我嘗試將代碼從maven遷移到bazel時看到的問題的重新創建。此遷移的主要重點之一是儘量減少每個類編譯所需的依賴關係,以便僅在需要時觸發構建。爲什麼scalac需要在類路徑上傳遞依賴關係

不幸的是我所看到的是,鑑於ClassIndirectlyNeedingFoo(用途) - >ClassUsingFoo(用途) - >Supplier如果Supplier的的ClassIndirectlyNeedingFoo休息彙編是不是在classpath。 詳細信息在這裏(https://github.com/ittaiz/scalac-troubleshooting)。
如果有人知道爲什麼scalac的行爲,我真的很感激它。
謝謝!

BTW,供應商是不是在源或ClassIndirectlyNeedingFoo的字節碼...

+1

爲什麼_wouldn't_你不需要傳遞依賴類路徑? –

+0

這是預期的行爲。但斯卡拉中心可能會嘗試在這方面進行改進;請參閱https://github.com/scalacenter/advisoryboard/blob/master/proposals/009-improve-direct-dependency-experience.md和https://github.com/scalacenter/advisoryboard/blob/master/minutes/003 -2016-q4.md#proposal-scp-009-improve-user-experience-for-builds-that-use-only-direct-dependencies –

+0

@MichaelZajac因爲'javac'沒有它,沒有提及'Supplier'在我正在編譯的東西的源代碼或字節碼中。對於運行時顯然它是需要的。 @SethTisue關於如何提前學習scalac需求的想法?顯然源/字節碼是不夠的。把編譯器插件看作是一個粗略的概念。謝謝! – Ittai

回答

2

好了,所以簡單的答案是,Why是不完全清楚anyone(見#4)。很明顯的是,衆所周知,scalac有時需要比人們想象的更多的依賴關係,而且很明顯,有時候會發生這種情況,這是一個bug

此外,從與Jason Zaugg的討論Gitter他似乎認爲我的上述問題只是像上面鏈接的一個bug家庭的一部分。

由於Seth鏈接在評論ScalaCenter已接受proposaloriginal PR)澄清此區域。
大多數與此相關的問題是四項建議有:

  1. 改進存根錯誤的用戶體驗,在Statement爲中心:他們是預期的常見的情況,而不是 罕見,意外或致命的情況。
  2. 減少導致存根錯誤的情況的數量......即,允許更多的使用情況導致存根錯誤 成功編譯,從而允許減少直接相關性。
  3. 一個編譯器標誌,用於編譯期間使用的所有符號(包括 源中未提及的那些符號)需要import語句。爲了與-Ywarn-unused-imports對稱,此選項可能會將 稱爲-Ywarn-undeclared-imports。主要是 協助完成從傳遞到直接依賴關係的轉換,而不是幫助使用直接依賴關係維護已經爲 的構建。
  4. Scala語言規範的擴展來列出其中來自另一編譯單元中的符號必須存在於 類路徑所有的情況下,包括(如由 @posco和 @adriaanm建議的):1)的子類,2)返回類型的超 公共方法,3)直接引用,4)等

這是agreed先走,與#3雖然我不知道什麼時候工作將開始。
合作撰寫該提案的Eugeene Burmako開始對原型solution進行原型設計,並在此基礎上製作了一個小型change
現在,這將不得不爲我的問題。

相關問題