This plugin adds task xitrumPackage
to your SBT project to collect all dependency .jar files for standalone Scala programs.
Compared to one-jar solutions, xitrum-package is faster. It doesn't merge the .jar files together, the .jar files are left "as is".
xitrum-package is used in Scala web framework Xitrum.
Alternatively, you can use sbt-pack.
Suppose your project looks like this:
build.sbt
project/
plugins.sbt
src/
...
dirToCopy/ <-- Directory you want to copy to the packaged directory
file1
file2
fileToCopy <-- File you want to copy to the packaged directory
Add to project/plugins.sbt
:
addSbtPlugin("tv.cntt" % "xitrum-package" % "1.9")
Add to build.sbt:
XitrumPackage.copy("dirToCopy", "fileToCopy")
Run:
sbt xitrumPackage
All dependency .jar files and .jar files generated from your project will be copied to directory target/xitrum
:
target/
xitrum/
lib/ <-- Dependency .jar files are collected here
dep1.jar
dep2.jar
yourProject.jar
dirToCopy/ <-- The specified directory is copied here
file1
file2
fileToCopy <-- The specified file is copied here
Note that even when you don't need to copy anything, you have to write in build.sbt:
XitrumPackage.copy()
If your SBT project has many modules (subprojects) and you want to add xitrum-package
to only several of them, you can use XitrumPackage.skip
:
// Shared settings used by many modules
val sharedSettings = ...
// For the default root project
override lazy val settings = super.settings ++ XitrumPackage.skip
// If you want to skip this module
lazy val module1 = Project(
id = "module1",
base = file("module1"),
settings = sharedSettings ++ Seq(
name := "module1"
) ++ XitrumPackage.skip
)
// If you want to xitrum-package this module
lazy val app = Project(
id = "main-app",
base = file("main-app"),
settings = sharedSettings ++ Seq(
name := "main-app"
) ++ XitrumPackage.copy("bin", "config", "public")
).dependsOn(module1)
Example: https://github.com/xitrum-framework/xitrum-multimodule-demo
You should create a shell script to start your Scala program like this:
- runner.sh (for *nix)
- runner.bat (for Windows)
Run example:
runner.sh mypackage.MyMainClass