deployment - How do I publish a fat JAR (JAR with dependencies) using sbt and sbt-release? -
i need build single jar, including dependencies, 1 of sub-projects can used javaagent.
i have multi-module sbt project , particular module lowest level 1 (it's pure java).
can (e.g. sbt-onejar, sbt-proguard or sbt assembly) override how lowest level module packaged?
it looks these tools designed post-publish step, need (replacement or additional) published artefact include dependencies (but 1 module).
update: publishing sbt-assembly instructions single project, , doesn't translate multi-project.
publishing sbt-assembly instructions single project, , doesn't translate multi-project.
people have been publishing fat jar using sbt-assembly & sbt-release without issues. here's blog article 2011: publishing fat jar created sbt-assembly. boils down adding addartifact(artifact(projectname, "assembly"), sbtassembly.assemblykeys.assembly) build.sbt (note blog little out of date assemblykeys member of sbtassembly directly).
for sbt 0.13 , above, prefer use build.sbt multi-projects too, i'd write like:
import assemblykeys._ lazy val commonsettings = seq( version := "0.1-snapshot", organization := "com.example", scalaversion := "2.10.1" ) val app = (project in file("app")). settings(commonsettings: _*). settings(assemblysettings: _*). settings( artifact in (compile, assembly) ~= { art => art.copy(`classifier` = some("assembly")) } ). settings(addartifact(artifact in (compile, assembly), assembly).settings: _*) see defining custom artifacts:
addartifact returns sequence of settings (wrapped in settingsdefinition). in full build configuration, usage looks like:
... lazy val proj = project(...) .settings( addartifact(...).settings : _* ) ...
Comments
Post a Comment