Scalaプロジェクトでsbtとmavenを使用する場合の長所と短所[終了]


138

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


5
マルチモジュールビルドのサポートが優れているため、ScalaプロジェクトではMavenからGradleに移行しました。SBTでのTwitterの経験は「盲目の痛み」であると彼らは述べており、彼らはそこから離れようとしています(Mavenはその過程の一時的なギャップです)。
Ben Manes

24
別のクールなクローズド質問...
セドリックH.

14
非常に多くの良い質問が私にはあると思います。誰がこれらの人々に質問を閉じるかどうかを恣意的に決定する力を与えるのかわかりません。私は彼らがもう近いかどうかに注意さえしません。
user1888243 2017年

2
同意します。幸い、この質問が終了する前に2つの回答があります。この質問の
締めくくりに

回答:


83

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

それ以外の場合は、SBTを使用してください。同じ依存関係にアクセスできます(実際にはmavenの最良の部分であるIMHO)。インクリメンタルコンパイルも利用できます。プロジェクト内でシェルを起動する機能。これも素晴らしいことです。

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

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


21
上記のいずれにも同意しませんが、私がScalaMock 3を書いている最中であることを指摘したいと思います。その主な目標の1つは、他のビルドシステムのサポートを容易にすることです。
ポールブッチャー

1
完全を期すために、生成されたモックを使用する必要がない限り(つまり、トレイト/インターフェースをモックする必要がある限り)、ScalaMock 2はどのビルドシステム(単なるjarでもかまいません)でも問題なく機能することを言及する価値があります。 )。
ポールブッチャー


3
なぜ彼らはmavenのインクリメンタルコンパイルを作成しなかったのですか?私見、sbtは未治療のNIH症候群の典型例です...
Cpt。Senkfuss

1
SBTが原因でCIに問題が生じるのはなぜですか?
ダニエル

21

質問は、多くの意見を生み出すだけの危険にさらされています。要件の明確なリスト、または環境の説明、以前の知識などがあるとよいでしょう。

FWIW、このScalaメーリングリストのスレッドにはもっと多くの意見があります

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

  • 単純なプロジェクトの場合、それは完全に簡単です(依存関係ができるまでビルドファイルは必要ありません)
  • Scalaオープンソースプロジェクト全体で一般的に使用されます。他の人のプロジェクトを覗くと、構成について簡単に学ぶことができます。さらに、多くのプロジェクトでは、sbtを使用することを前提としており、プロジェクトに依存関係として追加するための既製のコピーと貼り付けの手順を提供しています。
  • IntelliJ IDEAを使用すれば、完全に統合できます。あなたはできるIDEA利用SBT持ってあなたはすぐにSBTを使用することができますVERSA継続的にプロジェクトをコンパイルすると、副をIDEAプロジェクトを生成します。最後は、マイナーバージョンからマイナーバージョンにバンプされている他のライブラリーに依存する「スナップショット」サイクルにある場合に非常に便利です。プロジェクトを閉じ、ビルドファイルでバージョンを更新し、再実行します。gen-ideaタスク、そしてプロジェクトを再び開く:更新が完了しました。
  • あなたが必要になりますほとんどのタスク(と準備ができていますcompiletestrundocpublish-localconsole) - console最高の機能の一つです。
  • 一部の人々は、依存関係がGitHubから直接取得されるソースリポジトリである可能性があるという機能を強調しています。これは使ったことがないのでここではコメントできません。

依存関係管理にIvyを使用しているためにsbtを嫌う人もいます(長所と短所についてはコメントできませんが、ほとんどの場合それは問題ではありません)。ビルドファイルを指定するためにsbtを嫌う人もいます。 XMLではなくScala DSL。sbtのフォーマットがv0.7からv0.10に変わったことにがっかりする人もいましたが、最初から移行しても移行には影響しません。


27
シンボリック演算子の乱用と、両方が.sbtと.scalaの定義形式をサポートするなどのいくつかの愚かな決定を嫌いますが、それらを異なる場所に配置し、.sbtのステートメントは少なくとも空の行などで区切る必要があるためです。 sbtは改善していますが、現時点では不十分です。私が最も見逃しているのは、すべてのsbt機能をカバーする完全な(最小限から実際の複雑な).sbt / .scalaサンプルファイルです。とは言っても、Mavenはもっと吸うので、毎日sbtを使っています。
xiefei

6
この質問が閉じられたのは残念ですが、事実の違いもあると思います。たとえば、SBTに関するマニングの本からの抜粋:「Mavenの目標間に依存関係がある場合(たとえば、ある目標が別の目標によって使用されるファイルを生成するとします)ビルドをMavenで並列化することはできません。sbtでは、タスク間の明示的な依存関係を指定する必要があります。これにより、sbtはタスクをBY BY DEFAULTで並列実行できます。タスクAがBに依存し、CもBに依存している場合、 sbtはタスクBを実行し、次にAとCを並行して実行します。」このコメントが読者の一部に役立つことを願っています。
jhegedus 14

19
このスレッドはとても便利だと思いました。Stackoverflowのモデレーターはスレッドをあまりにも熱心に閉じると思うことがよくあります。ユーザーがまさに求めている(そしてWeb検索で見つける)ことが非常に多い場合に、トピックから外れていることを気にする人はいます。Stackoverflow modsがxkcd 979を意図的に再作成しようとしているようです。
Ville

3
@Ville私の考えも。反対票を投じ、編集し、締めくくるのはあまりにも積極的になりました。
ankush981 2016年

2
今これを見ている人のために、@ xiefeiの不満は対処されました。SBTはより多くのカスタム演算子/構文を削除し、/ sbtファイル内のステートメントは空白区切りを必要としなくなりました。
2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.