Sbt Native Packager supports embedding the jvm using the :ref:`jdkpackager-plugin`, however, in some cases you may want instead to embed the JVM/JRE in other formats, e.g. a tarball with one of the java archetypes.
To accomplish this you need to:
- Add the JVM/JRE of your choice to the mappings
- Make the launcher use the embedded jre
The JRE is by definition OS dependent, hence you must choose the one appropriate
for your case. The example below assumes a Linux 64 JRE, whose files are at
$HOME/.jre/linux64
. The files will be copied to a jre
directory in your
distribution
import NativePackagerHelper._
...
mappings in Universal ++= {
val jresDir = Path.userHome / ".jre"
val linux64Jre = jresDir.toPath.resolve("linux64")
directory(linux64Jre.toFile).map { j =>
j._1 -> j._2.replace(jreLink, "jre")
}
}
In order to run your application in production you also need to make the launcher
use the jre added above. This can be done using the -java-home
option with a
relative path.
javaOptions in Universal ++= Seq(
// Your original options
"-java-home ${app_home}/../jre"
)