2012-06-30 13 views
121

Scalaにはどのビルドツールが最適ですか?それぞれの長所と短所は何ですか?プロジェクトでどのプロジェクトを使用するかはどのように決定するのですか?Scalaプロジェクトでsbtとmavenを使用する場合の長所と短所

+4

マルチモジュールビルドの優れたサポートのため、私はScalaプロジェクトでMavenからGradleに移行しました。 SBTのTwitter [エクスペリエンス](http://www.youtube.com/watch?v=6pfdm-gIZus)は、「盲目的な痛み」として記述されており、ギャップ)。 –

+15

別のクールな閉じた質問... –

+8

私はそれがちょうど閉じられているので、多くの良い質問があります。私は誰が質問を閉じるかどうかを恣意的に決定するようにこれらの人々に力を与えるかどうかはわかりません。私は彼らが近くにいるかどうかにも注意を払わない。 – user1888243

答えて

74

私たちはCIサーバとうまく統合されているため、Mavenを使ってScalaプロジェクトを構築しています。もちろん、シェルスクリプトを実行してビルドを開始することもできますが、Mavenから出てくる他の情報がCIに取り込まれています。 ScalaプロジェクトにMavenを使用することが私が考えることができる唯一の理由です。

それ以外の場合は、SBTを使用してください。同じ依存関係にアクセスすることができます(実際には、IMHOについての最良の部分です)。増分コンパイルも得られますが、それは巨大です。あなたのプロジェクトの中でシェルを起動する能力。これは素晴らしいことです。

ScalaMockはSBTでしか動作しないため、Java Mockingライブラリではなく、これを使用したいと思うかもしれません。さらに、は、ビルドファイルに完全なスカラコードを書くことができるので、SBTを拡張するのが簡単なので、Mojoを書く際のすべての手順を経る必要はありません。

要するに、CIサーバーとの緊密な統合が本当に必要でない限り、SBTを使用してください。

+19

私は上記のいずれにも同意しませんが、私は[ScalaMock 3](http:// www。 paulbutcher.com/2012/06/scalamock-3-0-preview-release/)、その主な目的の1つは、他のビルドシステムのサポートを容易にすることです。 –

+0

うわー、私はいつでもすぐに職場でSBTを使うことができるとは確信していません。それを楽しみにしています! – mblinn

+1

完全性のために、ScalaMock 2は、生成されたモックを使用する必要がない限り(つまり、モックを必要とする限り)任意のビルドシステム(ちょうどjar)でうまく動作することに言及する価値があります特性/インターフェース)。 –

19

質問は多くの意見を生成する危険性があります。それはあなたの環境、以前の知識などの要件や説明の明確なリストを持っている方が良いでしょう

FWIW、より多くの意見がthis scala mailing list threadにあります。

私の2cは、次のとおりです。あなたは、単純なプロジェクトのための特定の要件

  • を持っていない場合はSBTで行く、それは
  • 全く楽だ(あなたが依存関係を持ってまで、あなたもビルドファイルは必要ありません) Scalaのオープンソースプロジェクトで広く使用されています。他の人のプロジェクトを見て、設定について簡単に知ることができます。さらに多くのプロジェクトでは、sbtを使用し、プロジェクトに依存するものとして追加するためにready-made copy+paste instructionを提供していると想定しています。
  • IntelliJ IDEAを使用すると完全に統合できます。 have IDEA use sbtプロジェクトを継続的にコンパイルすることができます。その逆の場合は、すぐにgenerate IDEA projectsにsbtを使用できます。最後は、マイナーバージョンからマイナーバージョンにぶつかっている他のライブラリに依存する「スナップショット」サイクルの場合に非常に便利です。プロジェクトを閉じてビルドファイルのバージョンを更新し、 gen-ideaタスクを開き、プロジェクトを再度開きます。更新が完了しました。
  • はあなたが必要とするほとんどのタスク(compiletestrundocpublish-localconsole)と準備ができています - consoleは、最高の機能の一つです。
  • 一部の人々は、GitHubから直接取得したソースリポジトリに依存するという機能を強調しています。私はこれを使用していないのでここでコメントすることはできません。一部の人々は、それは(私はその長所と短所についてはコメントできませんが、ほとんどの時間は、それが非問題です)依存関係の管理のためにアイビーを使用していますので、あなたが指定しているため、一部の人々はSBT嫌いSBT嫌い

XMLではなくScala DSLの観点からファイルをビルドします。一部の人々は、sbtの形式がv0.7からv0.10に変更されたことに失望しましたが、最初から開始すると、マイグレーションは影響を与えません。

+26

シンボリック演算子の乱用やいくつかの愚かな決定は、.sbtと.scalaの定義フォーマットをサポートしていますが、それらを異なる場所に置くなど、sbtは嫌です。少なくとも.sbtのステートメントは少なくとも空行などで区切らなければなりません。 sbtの文書は改善していますが、この時点では十分ではありません。私が一番欠けているのは、実際の複雑な最小限の.sbt/.scalaサンプルファイルで、すべてのsbt機能をカバーしています。つまり、私はMavenがずっと多くを吸うので、毎日sbtを使用しています。 – xiefei

+6

この質問がクローズされたことはあまりにも悪いことですが、私は実際の違いもあると確信しています。たとえば、ManningのSBTに関する本からの抜粋:「Mavenの目標間には の依存関係があります。別の場合) ビルドをMavenと並列化することはできません sbtを使用すると、タスク間の明示的な依存関係を指定する必要があります。 Bに依存し、次にタスクBを実行してから、 並列でAとCを実行します。このコメントが一部の読者に役立つことを願っています。 – jhegedus

+16

このスレッドは非常に便利です。私は非常に頻繁にStackoverflowの司会者はあまりにも熱心にスレッドを閉じると思う。ユーザーが何を求めているのか(そしてウェブ検索を通じて)非常に頻繁に「話題にならない」かどうかは誰が気にします。 Stackoverflowの改造者が意図的に[xkcd 979](https://xkcd.com/979/)を再作成しようとしているかのようです。 – Ville

関連する問題