web-dev-qa-db-ja.com

Scalaプロジェクトでsbt vs mavenを使用することの長所と短所

Scalaに最適なビルドツールはどれですか?それぞれの長所と短所は何ですか?それらのどれをプロジェクトで使用するかを決定する方法は?

137

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

それ以外の場合は、SBTを使用します。同じ依存関係にアクセスできます(maven、IMHOの最も良い部分)。また、インクリメンタルコンパイルも行われますが、これは巨大です。プロジェクト内でシェルを起動する機能も優れています。

ScalaMockはSBTでのみ動作するため、おそらくJavaモッキングライブラリではなく、それを使用したいと思うでしょう。その上、much完全なscala=コードをビルドファイルに記述できるため、SBTを拡張しやすくなります。したがって、Mojoの記述のすべての厳密な手順を実行する必要はありません。

つまり、CIサーバーへの緊密な統合が本当に必要でない限り、SBTを使用するだけです。

82
mblinn

この質問は、単に多くの意見を生み出す危険にさらされています。要件の明確なリストまたは環境、事前知識などの説明を用意することをお勧めします。

FWIW、 this scalaメーリングリストスレッド にはさらに意見があります。

私の2cは:特定の要件がない場合はsbtで行く

  • 単純なプロジェクトの場合、完全に楽です(依存関係ができるまでビルドファイルは必要ありません)
  • 一般的にScalaオープンソースプロジェクトで使用されます。他の人のプロジェクトを覗いてみると、構成について簡単に学ぶことができます。さらに、多くのプロジェクトでは、sbtを使用して、プロジェクトに依存関係として追加するための ready-made copy + paste instruction を提供することを想定しています。
  • intelliJ IDEAを使用する場合、完全に統合できます。 IDEAでsbt を使用してプロジェクトを継続的にコンパイルできます。逆も同様です。sbtを使用して迅速に IDEAプロジェクトを生成します 。最後のものは、マイナーバージョンからマイナーバージョンにバンプされた独自のライブラリに依存する「スナップショット」サイクルにある場合に非常に便利です-プロジェクトを閉じ、ビルドファイルのバージョンを更新し、再実行しますgen-ideaタスク、およびプロジェクトを再度開きます:更新が完了しました。
  • 必要なほとんどのタスクが用意されています(compiletestrundocpublish-localconsole)-consoleは最高の機能の1つです。
  • 一部の人々は、依存関係をGitHubから直接取得したソースリポジトリにできるという機能を強調しています。私はこれを使用していませんので、ここではコメントできません。

依存関係の管理にIvyを使用しているためsbtが嫌いな人もいます(賛否両論についてはコメントできませんが、ほとんどの場合、それは問題ではありません)。 Scala XMLではなくDSL。一部の人々は、sbtの形式がv0.7からv0.10に変更されたことに失望しましたが、ゼロから始めた場合、移行は明らかに影響しません。

21
0__