web-dev-qa-db-ja.com

最高のScalaビルドシステムは何ですか?

IDEについての質問はこちらにあります- これはIDE for Scala development? および What Scalaのツールの現在の状態は? ですが、IDEと混合した経験があります。現在、Eclipse IDEと自動ワークスペース更新オプションを使用しています。私のテキストエディタとしてのKDE 4のKateここに、私が解決したいいくつかの問題があります。

  1. 自分のエディタを使用するIDEは、コンポーネントを使用するすべての人を対象としています。私はKateの方が好きですが、更新システムは非常に煩わしいです(おそらくinotifyを使用せず、10秒のポーリング間隔です)。組み込みのテキストエディターを使用しない理由は、オートコンプリート機能が壊れているためIDEが10秒程度ハングするためです。
  2. 変更されたファイルのみを再ビルドしますEclipseビルドシステムが壊れています。クラスをいつ再構築するかわかりません。私は自分がプロジェクトに行く時間のほぼ半分を見つける->クリーン。さらに悪いことに、プロジェクトのビルドが完了した後でも、数分後に奇妙なエラーが表示されます(edit-これらのエラーは以前に解決されたようですプロジェクトで>クリーンですが、戻ってきます...)最後に、「プリファレンス/プロジェクトにエラーがある場合は起動を続行する」を「プロンプト」に設定しても、Scalaプロジェクトには効果がないようです(つまり、エラーが発生しても常に起動します)。
  3. ビルドのカスタマイズ「毎晩」のリリースを使用できますが、変更して自分のScala IDEのプラグインに組み込まれているコンパイラではなく、ビルドします。また、[eg] -Xprint:jvmをコンパイラに渡して(下位のコードを出力する)もよいでしょう。
  4. 高速コンパイルEclipseは常に正しくビルドされるとは限りませんが、fscよりもさらに迅速に動作します。

AntとMavenを調べましたが、まだ採用していません(#3と#4の解決にも時間を費やす必要があります)。次善のビルドシステムを動作させるために時間を費やす前に、他の提案があるかどうかを確認したかったのです。前もって感謝します!

[〜#〜] update [〜#〜]-現在、Mavenを使用しており、プロジェクトをコンパイラプラグインとしてそれに渡します。それは十分に速いようです。 Mavenがどのようなjarキャッシングを行うのかはわかりません。 Scala 2.8.0の現在のリポジトリが利用可能です[ link ]。アーキタイプは非常にクールで、クロスプラットフォームのサポートは非​​常に優れているようです。ただし、コンパイルの問題について、fscが実際に修正されているかどうか、またはプロジェクトが十分に安定しているかどうか(クラス名が変更されていないなど)がわかりません-手動で実行してもそれほど問題にはなりません。例を確認したい場合は、 [ github ]を使用しているpom.xmlファイルを自由に参照してください。

UPDATE 2-私が見たベンチマークから、Daniel SpiewakはビルダーがMavenよりも高速である(そして、増分変更を行っている場合、Mavenの10秒)レイテンシは煩わしくなります)、互換性のあるビルドファイルを作成できるのであれば、おそらくそれだけの価値があります...

50
gatoatigrado

ポイント2と4は、現在のスカラーで管理するのが非常に困難です。問題は、Scalaのコンパイラーがファイルの作成について少しばかげていることです。基本的に、そのファイルを本当にビルドする必要があるかどうかに関係なく、フィードしたものは何でもビルドします。 Scala 2.8.0では、この点で大幅な改善が行われますが、それまでは... Eclipse SDTには、変更の検出と依存関係の追跡を行うための非常に手の込んだ(そして非常にハックな)コードがあります。 Eclipse SDT 2.8.0は、前述のscalac自体の改善に依存します。

したがって、変更されたファイルのみをビルドすることは、ほとんど問題外です。 SDTを除いて、これを試すことさえ知っている唯一のツールはSBT( Simple Build Tool )です。ファイルがコンパイルされるときにコンパイラプラグインを使用してファイルを追跡し、コンパイラ自体が計算した依存関係グラフを照会します。実際には、これにより、世界での再コンパイルのアプローチよりも約50%改善されます。繰り返しますが、これは2.8.0より前のscalacの欠陥を回避するためのハックです。

良い知らせは、変更の検出について心配しなくても、適度に高速なコンパイルが依然として可能であることです。 FSCは、Eclipse SDTが高速インクリメンタルコンパイルを実装するために使用するのと同じテクノロジー(「チャーリーエペス」のように聞こえます)を使用します。一言で言えば、それはかなり機敏です。

個人的に、私は Apache Buildr を使用します。その構成は、MavenやSBTのどちらよりも大幅にクリーンであり、起動時間は数桁少なくなります(MRIで実行する場合)。 FSCと統合し、基本的な変更検出を独自に実行しようとします(かなりプリミティブ)。また、主要なScalaテストフレームワーク(ScalaTest、ScalaCheck、Specs))の自動魔法サポートに加えて、Javaソースおよび= IDE IntelliJとEclipseのメタ生成。ああ、それはMavenのすべての機能(依存関係の解決など)をサポートし、次にいくつかをサポートします。インタラクティブなシェルサポートの統合を可能にする拡張機能にも取り組んでいますJavaRebelを使用し、いくつかのシェルプロバイダー(Scala、JIRB、Clojure REPLなど)をサポートしています。SVNの準備はまだ整っていませんが、準備ができたら(おそらく1.3.5に間に合うように)コミットします。

ご覧のとおり、私はBuildrが最高のビルドツールであるという意見を非常に強く信じていますScalaそこにあるビルドツールです。そのドキュメントは、Scala心配ですが、それはすべてが単純すぎて、冗長に感じることなく文書化するのが難しいためです。たとえば、いつでも my GitHubリポジトリ の1つをチェックアウトできます。頑張ってください!

34
Daniel Spiewak

Intellij IDEA and its Scala integration ?Intellijは、Java=開発者の間で忠実な(狂信的な?)これはあなたのニーズに適しているかもしれません。

6
Brian Agnew

Emacsを使用している場合、 Ensime はかなり良いIDEだと思います。私が書いている時点では、EnsimeがIDEおよびScalaオブジェクトの両方で暗黙的変換を含む高速かつ正確なオートコンプリートを提供する唯一のJavaだと思います。

Speedbarを使用したコードブラウジングサポート、優れたYasnippetを使用したコードテンプレート、オートコンプリートを使用したコード補完メニューがあります。これらはすべて非常に近代的で、積極的に保守されているEmacsパッケージです。 MavenとSBTの追加設定なしの追加ビルドもサポートされています。

インタラクティブなデバッグ、リファクタリング、下位プロセスのScalaインタープリターなど、他にもたくさんあります。最新のIDE for Scalaに必要なものはすべて、Ensimeにすでにあります。 Emacsensに強くお勧めします。

4
Y.H Wong

Eclipseのscalaプラグインにもかなり不満を感じています。リストにいくつかの問題を追加できます。

  • オートコンプリートが機能するのは一部の場合のみです
  • デバッガーが正しく動作しない(特にscala xml)をデバッグしようとした場合)
  • デバッガーはブレークポイントを忘れます
  • 「定義に移動」が機能する頻度は高くありません。

Buildrが(とにかくビルドフロントで)より良い代替手段のように聞こえると聞いてうれしく思います。試してみます-ありがとうございます!

4
dberesford

完全性の理由から、私は パンツ -Twitterで使用されているビルドツール(初期のscala採用者)の1人)もいると言わざるを得ません。

主な違いは、scala(そしてpythonで書かれている)だけでなく) google build system をモデルにしていることだけです。

これはsbtほど肥大化していないので、新入生にとってははるかに単純ですが、Twitterやfoursquare以外でのパンツの使用について聞いたことがありません。

SBTが怖い場合は、おそらく別のそれほど人気のないビルドツール [〜#〜] abt [〜#〜]代替あなたのために?

4
om-nom-nom

私は同じ道を下りました、そしてここが私がいるところです:-いくつかの最初の調査の後、私はケイトを落としました。私はほとんどの場合にそれを使用するのが好きですが、タブ補完の定義などのことになると、それはひどく欠けていることに気づきました。代わりにgeditを検討することをお勧めします。これは、Scala開発に対してより堅牢です-私のエディターとしてgeditを使用しているため、SBTを使用しており、優れたビルドツールであることがわかりました。コードを変更すると、関連するファイルが再コンパイルされてテストスイートが実行される「テスト」モードにします。これは非常に効果的な方法です。

まだBuilderを確認していません。申し上げたいと思いますが、正直なところ、SBTを自由に使えるので、別のビルドツールを検討する必要が本当にありません。

3
Steve Thompson

Eclipseを使用したいが、sbtを使用してプロジェクトをビルドし、それでもデバッグできる場合は、こちらの投稿をご覧ください。

zikaprog.wordpress.com/2010/04/19/scala-Eclipse-sbt-and-debugging/

また、sbt以外のビルダーにも適用できます。

2
Roland

Mavenの最新バージョンScalaプラグインは、起動時間とインクリメンタルビルドを高速化するためにZinc/Nailgunをサポートしています。 Zincとインクリメンタルコンパイル を参照してください。

1
sourcedelica