web-dev-qa-db-ja.com

コードが依存するすべてのjarファイルを1つの場所に収集するためにsbtを取得するにはどうすればよいですか?

sbt は初めてです。すべての依存関係jarファイルとjarファイルを1つの場所に配置したいと考えています。 SBTはアプリを実行しますが、さまざまな依存関係が散在し、.ivy jarファイルが間接的に依存するものでいっぱいのフォルダ。

それで、それらをすべて1つの場所にコピーして別のマシンに配布できる簡単なコマンドはありますか?

37
Tim Pigden

使用できるプラグインはたくさんあります: sbt-Assemblysbt-proguardsbt-onejarxitrum-package =など.

SBTプラグインのリスト を参照してください。

19
pr1001

build.sbtファイルに次の行を追加します。

retrieveManaged := true

これにより、依存関係がローカルに収集されます

13
CatsLoveJazz

ビルドファイルに次のようにタスクを作成します:

lazy val copyDependencies = TaskKey[Unit]("pack")

def copyDepTask = copyDependencies <<= (update, crossTarget, scalaVersion) map {
  (updateReport, out, scalaVer) =>
    updateReport.allFiles foreach {
      srcPath =>
        val destPath = out / "lib" / srcPath.getName
        IO.copyFile(srcPath, destPath, preserveLastModified = true)
    }
}

このようにプロジェクトにタスクを追加します:

lazy val HubSensors =
  Project("HubSensors", file("HubSensors"), settings = shared ++ Seq(
    copyDepTask,
    resolvers ++= Seq(novusRels),
    libraryDependencies ++= Seq(
      jodatime
    )
  )) dependsOn(HubCameraVision, JamServiceProxy, HubDAL)

SBTコンソールで:

project [Project Name]
pack
10
torrens

Sbt-packプラグイン https://github.com/xerial/sbt-pack を試してください。これにより、target/packフォルダー内のすべての依存jarが収集され、起動スクリプトも生成されます。

8
leo

SBTネイティブパッケージャを試すこともできます: https://github.com/sbt/sbt-native-packager (sbt 0.7+)

これはまだWIPですが、今後数週間でPlay Framework 2.2で使用される予定です。これにより、スタンドアロンのZipファイル、Debianパッケージ(DEB)、Windowsインストールパッケージ(MSI)、DMG、RPMなどを作成できます。

4
Adrien Aubel

SBTドキュメントには 「One Jarプラグイン」のリスト があります。

2
bstpierre

このsbtプラグインを探してください: https://github.com/anvie/sbt-onedir-plugin

0
anvie