簡體   English   中英

由於速度慢和各種問題,Scala SBT編譯恐怖

[英]scala sbt compilation horror due to slowness and various issues

我在使用sbt的scala中編寫代碼的時間非常糟糕。 我知道與Java相比,scala中的編譯本來就很慢。

我已經嘗試過eclipse和intellij,以便在scala + sbt中進行開發,而且眾所周知IDE都可以勝任這項工作。 請為我提供以下恐怖信息:

  1. 即使在大型項目中,如何在scala中將編譯時間減少至毫秒(就像在Java中一樣)。...在IDE中(eclipse / intellij)。...鑒於我正在使用sbt

  2. 如何確保IDE中的內部版本只能遞增地工作,並且只能在更改的文件上工作。 我觀察到,每次文件更改/保存文件時,IDE都會進行完整構建.....再次記住,我正在使用sbt

  3. 在每次更改代碼后,當我執行sbt軟件包時,請對命令行提出相同的建議,並且sbt似乎重新編譯了整個項目而不是更改了文件。

  4. 在intellij中,當我嘗試運行單元測試用例時,將再次編譯整個基於sbt的項目

  5. 另外,如果我同時在intellij中導入一個項目並使用sbt命令行,則intellij構建和命令行構建不能很好地配合,並且我開始觀察到intellij中的完整編譯和奇怪的編譯錯誤

這只是部分答案,因為它在很大程度上取決於您正在做的事情以及代碼的外觀-但是我傾向於不使用IDE進行編譯/測試。 相反,我在sbt中運行了它(有時與其他命令配合使用,具體取決於我在做什么)

> ~test-quick

其中( 引用文檔 ):

  • 在上次運行中失敗的測試
  • 之前未運行的測試
  • 重新編譯具有一個或多個可傳遞依賴項(可能在另一個項目中)的測試。

代字號使它在每次代碼更改時都運行

無論如何對我來說,它非常快,而且很重要的是,它只運行可能發生的變化

我聽到的另一件事(但不能保證會加快速度)是盡可能多地顯式鍵入。 類型推斷器本來就很慢(當您考慮必須要做的事情時才有意義)

根據Saby的要求進行編輯

在討論您提出的觀點之前,我只想指出,這些並不是真正的恐怖,而日食/智慧實際上並沒有使他們感到驚訝。 實際上,當您考慮它時,它們的確令人印象深刻。

Scala是一種比Java更復雜的語言,這意味着編譯器必須比Java做更多的事情。 我在這里談論的是諸如宏,隱式和類型推斷之類的功能。 這些功能不是免費的,編譯時間和內存將在這里大放異彩。 (基本上是因為編譯器必須進行各種瘋狂的事情來進行類型推斷;對於宏,要多次運行代碼;等等,等等,等等)

顯然,就像任何其他語言一樣,您的編譯時間由很多因素決定:您使用什么功能,使用什么模式,什么依賴項(僅舉幾例)。

無論如何,一點一點:

  1. 老實說,我不知道該如何回答。 我目前正在從事一個較小的Java項目(想一想十二個依賴項,幾千行代碼,一些春天,但其他事情還不多),並且在Intellij中肯定不會得到毫秒級的編譯時間。 如果這確實引起了問題,那么我的唯一建議是使用命令行。

  2. 我對eclipse一點都不了解,但是如果您使用的是Intellij 13 ,則可以這樣設置增量編譯器 sbt插件在Intellij 14中進行了很大的更改,因此我不認為這已不再是一個選擇(即,它會做任何事情)

  3. 我認為上面的答案涵蓋了這一點。 關鍵是您不必使用sbt程序包,而我通常不需要。 而是輸入sbt並在加載時輸入〜test-quick並僅在需要時運行sbt軟件包

  4. 這可能就是intellij的工作方式。 像3一樣,我認為您無法再對此進行更改

  5. 我不知道這些是什么,但是您可能應該用Google搜索該錯誤,如果找不到任何內容,請使用一些示例創建一個新的Stack Overflow問題。

其他要考慮的事情

設置可能很重要。 我知道,大多數頑固的Scala開發人員都使用命令行上稱為ensime和sbt的插件來測試/編譯(以及一兩次repl),以崇高的文字或emacs編寫代碼。 否則(無論如何,在撰寫本文時),大多數其他人(包括我在內)都使用Intellij編寫代碼,然后在命令行上使用sbt或Intellij本身進行測試/編譯。 您需要嘗試並找到最適合您的東西。

您要考慮的另一件事是您所使用的sbt版本。 我沒有基准測試,但我記得較舊的版本速度較慢,僅僅因為您正在運行舊版本的某些東西而改變工作方式會很痛苦。

還要確保您已安裝Java 8 SDK-我知道Typesafe的女孩和男孩正在花費越來越多的時間為Java 8優化sbt。

第2點和第4點僅對我有用(並且使用了很長時間),不需要進行特殊設置。

  1. 另外,如果我同時在intellij中導入一個項目並使用sbt命令行,則intellij構建和命令行構建不能很好地配合,並且我開始觀察到intellij中的完整編譯和奇怪的編譯錯誤

這應該在新的Scala插件版本中修復

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM