I'm already a developer

How to register a library made by Scala to the Maven Central Repository

Today, I’d like to explain how to register a library made by Scala to the Maven Central Repository. I use sbt (ver 0.13).

Introduction

I created Scala API Wrapper for Instagram named sInstagram. Since other Scala API Wrapper content was old, I made it myself.

How to register a library to Maven Central Repository is like the following procedure.

  • Create a Scala library and push to Github
  • Create an account with Sonatype JIRA
  • Application for project at Sonatype JIRA
  • Create and register keys with the GPG
  • Fix build.sbt
  • Deploy to Sonatype OSSRH
  • Released on Sonatype OSSRH

The following link is very helpful.

Using build.sbt to register a library to Maven Central Repository

The following URL is helpful for the deployment work in build.sbt.

First add the necessary libraries to Scala’s project.

Let’s edit this file ./project/plugins.sbt

addSbtPlugin("com.jsuereth" % "sbt-pgp" % "1.0.0")
addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "0.2.1")

And then edit this file ~/.sbt/0.13/sonatype.sbt

credentials += Credentials("Sonatype Nexus Repository Manager",
    "oss.sonatype.org",
    "username",
    "password")

After that, edit this file ./build.sbt

import SonatypeKeys._

sonatypeSettings

name := "appName"

version := "librari version"

scalaVersion := "Scala version"

publishMavenStyle := true

publishTo := {
  val nexus = "https://oss.sonatype.org/"
  if (isSnapshot.value)
    Some("snapshots" at nexus + "content/repositories/snapshots")
  else
    Some("releases" at nexus + "service/local/staging/deploy/maven2")
}

publishArtifact in Test := false

pomIncludeRepository := { _ => false }

organization := "package name"

organizationHomepage := Some(url("Your Home Page URL"))

description := "library description"

pomExtra :=
  <url>https://github.com/yukihirai0505/sInstagram</url>
  <licenses>
    <license>
      <name>LICENSE Name</name>
      <url>LICENSE URL</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <scm>
    <url>repositroy url</url>
    <connection>scm:git:repository url</connection>
  </scm>
  <developers>
    <developer>
      <id>sonatype account name</id>
      <name>Your name</name>
      <url>your home page</url>
    </developer>
  </developers>

If you set up so far and have registered GPG key, then you should run sbt command.

Let’s not forget to register keys created with GPG on the server.

You can deploy with publishSigned on sbt console.

I write in here links etc. that helped me with errors encountered. Because I could not successfully register the key of GPG, I could not close it with an error when closing the project that I deployed. Also, if the package name specified in orgranization is different from the GroupId of the project you are applying to, you may get an error on release.