Publish zip created by sbt-native-packager

Add the following line to your sbt build (around packagerSettings should be fine)

deploymentSettings

Depending on what you want to do you may not need to define the publishZip task you could run

  • sbt universal:publish which should only publish the zip
  • redefine publish so it depends on universal:publish which would publish all the projects artifacts publish <<= publish.dependsOn(publish in config("universal"))

Then run sbt publish.

For completeness sake deploymentSettings (and packagerSettings) come from com.typesafe.sbt.SbtNativePackager which is useful to know if you use a scala build :)


The deploymentSettings worked however I wanted to refine the settings. It seems there were several issues going on. I and finally came up with the following solution:

//--use sbt-native-packager default java application 
packageArchetype.java_application

//--a dummy task to hold the result of the universal:packageBin to stop the circular dependency issue
val packageZip = taskKey[File]("package-zip")

//--hard coded result of "universal:packageBin"
packageZip := (baseDirectory in Compile).value / "target" / "universal" / (name.value + "-" + version.value + ".zip")

//--label the zip artifact as a zip instead of the default jar
artifact in (Universal, packageZip) ~= { (art:Artifact) => art.copy(`type` = "zip", extension = "zip") }

//--add the artifact so it is included in the publishing tasks
addArtifact(artifact in (Universal, packageZip), packageZip in Universal)

//--make sure the zip gets made before the publishing commands for the added artifacts
publish := (publish dependsOn (packageBin in Universal)).value

publishM2 := (publishM2 dependsOn (packageBin in Universal)).value

publishLocal := (publishLocal dependsOn (packageBin in Universal)).value

The key pieces of this solution came from a comment from yanns and dgrandes