web-dev-qa-db-ja.com

sbtとGradleの比較

私はScalaに飛び込み、sbtに気付きました。Java/ groovyプロジェクトのGradleには非常に満足しています。Gradleにはscalaプラグインがあります。

ScalaプロジェクトでGradleよりもsbtを好む理由は何でしょうか?

108
Hans Westerbeek

SBTとGradleの重要な違いの1つは、その依存関係管理であることに注意してください。

キャッシュが混乱する可能性はありますが、アイビーがスナップショットの解決を理解していないというのは事実ではありません。 Eugeneはこの点を別のスレッド、おそらく管理者リストで説明しました。 0.12で対処されたsbtの自動更新に問題があります。

私が知る限り、Ivyがサポートしていないのは、Mavenが行う方法でスナップショットを公開することです。私はこれを別の場所で述べたと思いますが、状況を改善したい人がいれば、Gradleチームと協力して依存関係管理コードを再利用するのが最善の努力だと思います。

ご存知のように、IvyとMavenのスナップショットの依存関係の問題は、Gradleが最終的にIvyを独自の依存関係管理コードに置き換えた理由の1つです。それは大きな仕事でしたが、多くの良さをもたらしました。

このツイート は、すべての状況が将来進化する可能性があると述べています:

マークは過去に、SBTにIvyの代わりにGradleを使用することに興味があると述べました。

(両方のツールが お互いから学ぶ

59
VonC

私にとって、SBTの主な特徴は次のとおりです。

  • 高速コンパイル(fscより高速)。
  • 継続的なコンパイル/テスト:コマンド~testは、変更を保存するたびにプロジェクトを再コンパイルおよびテストします。
  • いくつかのscalaバージョン間でのクロスコンパイルとクロスパブリッシング。
  • 正しいscala=バージョン互換性で依存関係を自動的に取得します。

欠点は次のとおりです。

  • 新規ユーザーを思いとどまらせる傾向のある象形文字の構文(特にJavaから来た場合)
  • 「タスク」を定義する簡単な方法はありません。特別なビルド手順が必要な場合は、プラグインを見つけるか、自分でプラグインを作成する必要があります。
53
paradigmatic

sbtはScala= DSLであり、そのためにScalaはファーストクラスの市民であるため、原則としては適切なようです。

ただし、sbtはバージョン間の大きな互換性のない変更に悩まされているため、タスクに適した正常に機能するプラグインを見つけて機能させるのが難しくなります。

Sbtは解決したよりも多くの問題を引き起こしていたので、私は個人的にsbtをあきらめました。私は実際にgradleに切り替えました。

図を移動します。

40
Jens Schauder

私はgradleがかなり新しく、sbtが非常に新しいです。これまでのところ、sbtで本当に気に入っているのは対話型コンソールです。これにより、「inspect」などのコマンドを使用して、何が起こっているかをよりよく把握できます。 AFAIK gradleはこのatmのようなものを提供しません。

4
eugenevd