Skip to content

SBT plugin for collecting dependency .jar files for standalone Scala programs

License

Notifications You must be signed in to change notification settings

xitrum-framework/xitrum-package

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

Usage

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 xitrum-package to your project

Add to project/plugins.sbt:

addSbtPlugin("tv.cntt" % "xitrum-package" % "1.9")

Add to build.sbt:

XitrumPackage.copy("dirToCopy", "fileToCopy")

Do the packaging

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()

Multimodule project

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

Boot script

You should create a shell script to start your Scala program like this:

Run example:

runner.sh mypackage.MyMainClass

About

SBT plugin for collecting dependency .jar files for standalone Scala programs

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages