49

私は Maven のヘビー ユーザーでしたが、現在はいくつかのプロジェクトで SBT を徐々に使用しています。

SBT を使用してスタンドアロン Java プロジェクトを作成する方法を教えてください。このプロジェクトは JAR ファイルとしてパッケージ化する必要があり、この JAR ファイルは別の SBT プロジェクトで依存関係として使用されます。

Maven では、pom.xmlビルド時にどのタイプのアーティファクトを生成する必要があるかを知ることができました。SBT でできる類似のことはありますか?

4

5 に答える 5

78

スタンドアロンと、プロジェクトを依存関係または別のプロジェクトとして使用できるようにすることには違いがあります。最初のケースでは、 sbt-assemblyなどのプラグインを使用します。これにより、プロジェクト クラス ファイルとそのすべての依存関係を含む1 つのjar ファイルが作成されます。アプリケーションを作成すると、どこからでも実行できるダブルクリック可能な jar が得られます。

プロジェクト A を別のプロジェクト B の依存関係として使用する場合は、さまざまなオプションがあります。sbt package(@Channing Walton の回答)を使用して、A のクラス ファイルをパッケージ化することができます。.jar次に、結果のファイルをプロジェクト B のディレクトリにドロップできますlib。ただし、A にもライブラリが必要な場合は、プロジェクト B のライブラリにも配置されるようにする必要があります。

より良いアプローチは、プロジェクトを公開することです。を使用して、純粋にローカルマシンでそれを行うことができますsbt publish-localpackageこれにより、A の依存関係を含む POM ファイルとともに、別のプロジェクトの sbt からアクセスできる特別なローカル ディレクトリにによって生成された jar が格納されます。グループ ID (組織) と成果物 ID ( name) とプロジェクト A のバージョンです。たとえば、次のようになりますbuild.sbt

name              := "projecta"

version           := "0.1.0-SNAPSHOT"

organization      := "com.github.myname"

scalaVersion      := "2.10.3"

publishMavenStyle := true

で公開した後sbt publish-local、次の依存関係をプロジェクト B に追加できます。

libraryDependencies += "com.github.myname" %% "projecta" % "0.1.0-SNAPSHOT"

純粋な Java プロジェクトがある場合は、Scala バージョン サフィックスを省略できます。つまり、プロジェクト A では次のようになります。

crossPaths       := false

autoScalaLibrary := false

そして、プロジェクト B で:

libraryDependencies += "com.github.myname" % "projecta" % "0.1.0-SNAPSHOT"

(グループ ID と成果物 ID の間で 1%文字のみを使用)。

公開の詳細については、sbt ドキュメントを参照してください。

于 2014-01-05T20:57:54.677 に答える
7

確かに、'sbt package' コマンドを使用できます。jar ファイルが作成されますが、この jar には依存関係がありません。実行するには、ライブラリに 'classpath' arg を指定する必要があります。

あなたの場合、スタンドアロンの実行可能なファイルが必要です。そして、依存関係を追加する必要があります。これを行うには、SBT の「アセンブリ」プラグインを使用できます。https://github.com/sbt/sbt-assembly/を参照してください。

その後、「sbt assembly」コマンドを実行するだけで、いつでもどこでも展開して実行できるすべての依存関係を含むファット jar ファイルが提供されます。

詳しくはこちらの記事へ

于 2015-01-04T19:00:44.673 に答える