web-dev-qa-db-ja.com

SBTを使用してスタンドアロンjarを作成する

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

SBTを使用してスタンドアロンのJavaプロジェクトを作成するにはどうすればよいですか? 。

Mavenでは、pom.xmlビルド時に生成するアーティファクトのタイプ。 SBTでできることは何かありますか?

47
sparkr

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

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

より良いアプローチは、プロジェクトをpublishすることです。 sbt publish-localを使用して、ローカルマシンで純粋にそれを行うことができます。 packageによって生成されたjarを、Aの依存関係を含むPOMファイルとともに、別のプロジェクトのsbtからアクセスできる特別なローカルディレクトリに保存します。グループID(組織)および成果物ID(名前)およびプロジェクトのバージョン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 documentation での公開の詳細。

74
0__

'sbt package'はjarファイルを生成します。

実行可能にする場合は、次を.sbt構成に追加する必要があります。

mainClass in Compile := Some("your.main.Class")
30
Channing Walton

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

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

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

詳細については、こちらをご覧ください 記事

7
maxmalakhov
publishLocal

アーティファクトをビルドし、ローカルIvyリポジトリに公開して、ローカルプロジェクトの依存関係で使用できるようにします。

publishM2

上記と同じですが、アーティファクトはIvyリポジトリの代わりにローカルのMavenリポジトリで公開されます。

4
Marco

あなたのプロジェクトでスタンドアロンのjarファイルを作成する最も簡単な方法は、悲しいことにsbtの中にないことだと思います。

私は個人的にIDE:Intellijを使用してjarを作成します(「アーティファクトのビルド」機能を使用)。

Intellijのおかげで、jarに含めるライブラリを簡単に選択できます(たとえばscala stl)。

私見、これはプロジェクトの実行可能なjarを取得する最も簡単な方法です。

scala stlを置くと、正しいバージョンのscalaは「scala」とともにインストールされます。

2
gwenzek