A walk through of the Gradle config required to publish a Android library to Maven Central using https://oss.sonatype.org.
The build.gradle
Add the following lines bellow apply plugin: 'com.android.library'
.
apply plugin: 'maven'
apply plugin: 'signing'
Add artifact info for Maven.
group = "com.example.mylib"
archivesBaseName = "mylib"
version = "1.0"
Add archive configuration by extending from the default one.
configurations {
archives {
extendsFrom configurations.default
}
}
Add signing configs. More on this later.
signing {
sign configurations.archives
}
Add deployment config.
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
pom.project {
name 'AboutIt'
packaging 'jar'
// optionally artifactId can be defined here
description 'A About-page creator'
url 'http://www.example.com/example-application'
scm {
connection 'scm:git:https://github.com/victorhaggqvist/AboutIt.git'
developerConnection 'scm:git:https://github.com/victorhaggqvist/AboutIt.git'
url 'https://github.com/victorhaggqvist/AboutIt'
}
licenses {
license {
name 'The Apache License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'atriix'
name 'Victor Häggqvist'
email '[email protected]'
}
}
}
}
}
}
Signing and GPG
Back to the signing config. Artifacts are signed using GPG, that is not your regular Android keys. You will need to create yourself GPG keys for publishing to Maven.
The config is read from ~/gradle/gradle.properties
. Add your keyinfo and Jira login config like this.
signing.keyId=YourKeyId // something like WERJFK23
signing.password=YourPublicKeyPassword
signing.secretKeyRingFile=/path/to/my/secret/key/file.gpg
ossrhUsername=your-jira-id
ossrhPassword=your-jira-password
You may find your keyId by
$ gpg --list-packets keyfile.gpg
That key will also need to be published to a keyserver in order to actually release the package. You may publish your keys to MIT PGP Public Key Server like this.
$ gpg --keyserver pgp.mit.edu --send-keys keyid
Deploy
Now to actually upload this to staging.
$ gradle uploadArchives
Or you may do the same thing from Android Studio by running the Gradle task uploadArchives
.
Once deployed follow this steps to release the deployment, http://central.sonatype.org/pages/releasing-the-deployment.html.
If you like to release with a command instead you can use a plugin called nexus-workflow
. To use it, edit the root build.gradle
in the project and add classpath 'com.adaptc.gradle:nexus-workflow:0.6'
to dependencies. This should give something like this.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
classpath 'com.adaptc.gradle:nexus-workflow:0.6'
}
}
Now add some more properties in ~/gradle/gradle.properties
. Edit username and password.
oss-releases.username=mySonatypeUsername
oss-releases.password=mySonatypePassword
oss-releases.url=https://oss.sonatype.org/index.html#stagingRepositories
In the artifacts build.gradle
you then add apply plugin: 'nexus-workflow'
.
Now to release your deployment you run.
$ gradle nexusStagingRelease
Complete files
The complete files now look like this.
project/atrifact/build.gradle
apply plugin: 'com.android.library'
apply plugin: 'maven'
apply plugin: 'signing'
apply plugin: 'nexus-workflow'
group = "com.snilius"
archivesBaseName = "aboutit"
version = "1.0.1"
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
versionCode 2
versionName version
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile 'com.android.support:appcompat-v7:21.0.3'
}
configurations {
archives {
extendsFrom configurations.default
}
}
signing {
sign configurations.archives
}
uploadArchives {
repositories {
mavenDeployer {
beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots/") {
authentication(userName: ossrhUsername, password: ossrhPassword)
}
pom.project {
name 'AboutIt'
packaging 'jar'
// optionally artifactId can be defined here
description 'A About-page creator'
url 'https://github.com/victorhaggqvist/AboutIt'
scm {
connection 'scm:git:https://github.com/victorhaggqvist/AboutIt.git'
developerConnection 'scm:git:https://github.com/victorhaggqvist/AboutIt.git'
url 'https://github.com/victorhaggqvist/AboutIt'
}
licenses {
license {
name 'The Apache License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id 'atriix'
name 'Victor Häggqvist'
email '[email protected]'
}
}
}
}
}
}
project/build.gradle
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0'
classpath 'com.adaptc.gradle:nexus-workflow:0.6'
}
}
allprojects {
repositories {
jcenter()
}
}