I recently wanted to deploy some artifacts to a Maven repository via SSH
using SBT 0.11 but couldn’t find a complete answer in one spot. This
probably has more to do with my sub-par Googling skills than lack of
answers in the world, but for future reference I got it to work by adding
the following to build.sbt
:
publishMavenStyle := true publishTo <<= (version) { version: String => val repoInfo = if (version.trim.endsWith("SNAPSHOT")) ( "nparry snapshots" -> "/home/nparry/repository.nparry.com/snapshots" ) else ( "nparry releases" -> "/home/nparry/repository.nparry.com/releases" ) val user = System.getProperty("user.name") val keyFile = (Path.userHome / ".ssh" / "id_rsa").asFile Some(Resolver.ssh( repoInfo._1, "repository.nparry.com", repoInfo._2) as(user, keyFile) withPermissions("0644")) }
With this addition in place, invoking sbt publish
uploads the
project’s JAR file along with a POM, source and javadoc bundles. Note
that I’m using a SSH key for authentication rather than having SBT
prompt me for a password.
This isn’t quite as nice a solution as what I found to work
with SBT 0.7, as extra tidbits like the
maven-metadata.xml
files are not generated. However, the maven-sbt
plugin I used before seems not to have made the jump beyond SBT 0.7.
You can see the change in context at the Github page for the project in question. I pieced this together from the Publishing and Resolvers pages of the SBT wiki.