sbt は初めてです。すべての依存関係jar
ファイルとjarファイルを1つの場所に配置したいと考えています。 SBTはアプリを実行しますが、さまざまな依存関係が散在し、.ivy
jarファイルが間接的に依存するものでいっぱいのフォルダ。
それで、それらをすべて1つの場所にコピーして別のマシンに配布できる簡単なコマンドはありますか?
使用できるプラグインはたくさんあります: sbt-Assembly 、 sbt-proguard 、 sbt-onejar 、 xitrum-package =など.
SBTプラグインのリスト を参照してください。
build.sbt
ファイルに次の行を追加します。
retrieveManaged := true
これにより、依存関係がローカルに収集されます
ビルドファイルに次のようにタスクを作成します:
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
Sbt-packプラグイン https://github.com/xerial/sbt-pack を試してください。これにより、target/packフォルダー内のすべての依存jarが収集され、起動スクリプトも生成されます。
SBTネイティブパッケージャを試すこともできます: https://github.com/sbt/sbt-native-packager (sbt 0.7+)
これはまだWIPですが、今後数週間でPlay Framework 2.2で使用される予定です。これにより、スタンドアロンのZipファイル、Debianパッケージ(DEB)、Windowsインストールパッケージ(MSI)、DMG、RPMなどを作成できます。
SBTドキュメントには 「One Jarプラグイン」のリスト があります。
- sbt-Assembly: https://github.com/sbt/sbt-Assembly
- xsbt-proguard-plugin: https://github.com/adamw/xsbt-proguard-plugin
- sbt-deploy: https://github.com/reaktor/sbt-deploy
- sbt-appbundle(OS xスタンドアロン): https://github.com/sbt/sbt-appbundle
- sbt-onejar(One-JAR™を使用してプロジェクトをパッケージ化): https://github.com/sbt/sbt-onejar
このsbtプラグインを探してください: https://github.com/anvie/sbt-onedir-plugin