Publishing Repo to Maven Central

https://www.notion.so/Publishing-Repo-to-Maven-Central-149966b2de424104bb0d0f9bf87b6116

Create an account on oss.sonatype.org

Create an account and create an ISSUE about Repo. And waiting approved.

Generate and share a PGP signature

Installing GnuPG

gpg --version

Generating a Key Pair and Sharing Key

1
2
3
4
5
gpg --generate-key
gpg --list-keys --keyid-format short
gpg --list-secret-keys --keyid-format short
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys <pubkeyid>
// gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys <pubkeyid>

Delete Key or Sub Key

1
2
3
4
5
gpg2 –edit-key A6BAB25  
gpg> 1  
gpg> save  
gpg> key 2  
gpg> delkey  

Local GPG

Add ~/.gradle/gradle.properties with following content:

1
2
3
4
5
6
7
8
9
signing.keyId=<pubkeyid>
signing.password=<passwordgpg>
// For new version GPG, secring.gpg does not be used.
// But you can still use `gpg --export-secret-keys > ~/.gnupg/secring.gpg` to generate
// On windows, you can use `C:/Users/<yourname>/.gnupg/secring.gpg` instead.
signing.secretKeyRingFile=/Users/<yourname>/.gnupg/secring.gpg

ossrhUsername=<name>
ossrhPassword=<password>

Project Configuration

build.gradle example:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
group net.bndy  
version 1.0

apply plugin: java  
apply plugin: maven  
apply plugin: signing

sourceCompatibility = 1.8

repositories {  
  mavenCentral()  
}

dependencies {  
  testCompile group: junit, name: junit, version: 4.12  
  compile group: com.fasterxml.jackson.core, name: jackson-core, version: 2.9.3  
  compile group: com.fasterxml.jackson.core, name: jackson-databind, version: 2.9.3  
  compile group: commons-codec, name: commons-codec, version: 1.11  
  compile group: javax.mail, name: javax.mail-api, version: 1.6.0  
  compile group: org.apache.directory.studio, name: org.apache.commons.io, version: 2.4  
  compile group: javax.servlet, name: servlet-api, version: 2.5  
}

task javadocJar(type: Jar) {  
  classifier = javadoc  
  from javadoc  
}

task sourcesJar(type: Jar) {  
  classifier = sources  
  from sourceSets.main.allSource  
}

artifacts {  
  archives javadocJar, sourcesJar  
}

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 Jlib  
      packaging jar

      // optionally artifactId can be defined here  
      description A Java Library  
      url https://github.com/bndynet/Jlib’

      scm {
        url https://github.com/bndynet/Jlib’  
        connection scm:git:git://github.com/bndynet/Jlib.git’  
        developerConnection scm:git:git@github.com:bndynet/Jlib.git  
      }

      licenses {  
        license {  
          name The Apache License, Version 2.0  
          url http://www.apache.org/licenses/LICENSE-2.0.txt’  
        }
      }

      developers {  
        developer {  
          id bndynet  
          name Bendy Zhang  
          email zb@bndy.net  
          url http://bndy.net’  
        }
      }
    }
  }
}

Deployment

  1. gradle uploadArchives
  2. Go to https://oss.sonatype.org/#stagingRepositories to close your repo. If closed successfully, you can release it. Otherwise, drop it and regradle it again.
This post is licensed under CC BY 4.0 by the author.