Publishing an SBT Project onto Bintray: an Example Last updated: 20 Aug 2016

Table of Contents

As explained in the post Add a Github Project as a Dependency in SBT, it is not as easy to add dependencies to Scala/Java projects as it is for interpreted languages because we need to compile sources prior to using them.

Although you can just build the package your project and use it as an unmanaged dependency, placing the package on a publicly available platform like bintray allows more people to use it and keep track of newer versions as they come.

So here's a quick example of the steps you need to take to publish a package on bintray, and how to reference it.

TL; DR: Here's a project using the configs explained on this post: scala-date-time-utils

bintray-sbt plugin

We'll be using sbt/bintray-sbt, which is an sbt plugin made for this specific purpose.

Add the following to project/plugins.sbt :

A newer version (0.4.0) is available but there are, as of this writing, some show stopper bugs such as this one

addSbtPlugin("me.lessis" % "sbt-bintray" % "0.3.0")

Bintray

Create a free account at bintray.com

Cick API Key to obtain a key at https://bintray.com/profile/edit

Add a new maven package; you should see something like this: add a new project under "maven" type add a new project under "maven" type

Credentials

Add the following to ~/.bintray/.credentials , replacing stuff with your own values.

realm = Bintray API Realm host = api.bintray.com user = <insert-your-username-here> password = <insert-your-key-here>

build.sbt

Add the following to build.sbt , replacing stuff with your own values.

name := "<your-project-name>" scalaVersion := "2.11.8" // change this if you need to version := "0.1.0" organization := "<your-organization-name>" // not needed if you don't use scalatest libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.6" % "test" // you can choose other licenses too licenses += ("MIT", url("http://opensource.org/licenses/MIT"))

Publishing

You just need to run sbt publish to package your project and upload it to bintray.

If you've followed all the steps correctly, you should see something like this:

$ sbt publish [info] Loading project definition from /home/felipe/scala-date-time-utils/project [info] Set current project to scala-date-time-utils (in build file:/home/felipe/scala-date-time-utils/) ... ... [info] published scala-date-time-utils_2.11 to https://api.bintray.com/maven/queirozfcom/maven/maven/com/queirozf/scala-date-time-utils_2.11/0.1/scala-date-time-utils_2.11-0.1.0-javadoc.jar [info] queirozfcom/scala-date-time-utils@0.1.0 was released

Extras

Using your project

You don't need to add the plugin to plugins.sbt if you just want to use a package on bintray

Add the following to build.sbt , replacing stuff with your own values, the same you've used in previous steps.

resolvers += Resolver.bintrayRepo("<your-bintray-username>","maven") libraryDependencies += "<your-organization-name>" %% "<your-project-name>" % "0.1.0"

Done. You can start import ing classes and methods from your package on bintray now

Cross-Building your project for Scala 2.11 and 2.10

You should probably publish your library for both Scala 2.11 and Scala 2.10, since we know these versions are not binary-compatible.

You can do that quite easily. Add crossScalaVersions key to your build.sbt file, as follows:

// add this to build.sbt to build your project against these scala versions crossScalaVersions := Seq ( "2.11.8" , "2.10.6" )

In addition to that, you need to change the command you use for actually publishing the project to bintray. So instead of using publish , use +publish :

$ sbt "+publish"

See also: SBT Docs: Cross building a project