如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral

最近想把Jar包上传到Maven中央仓库,在网上搜了下没有特别详细的文章,所以自己造个轮子把具体步骤记录下来。

适合人群

  • 了解如何使用Gradle构建项目

步骤

  1. 创建Bintray账号
  2. 创建仓库
  3. GPG签名
    3.1. 使用Bintray公共密钥
    3.2. 使用个人密钥
  4. 创建Sonatype账号
  5. 申请权限
  6. 编写Gradle脚本
  7. 发布

开始

1.创建Bintray账号

前往 bintray.com ,右上角点击 Sign In 跳转到登录页面,可以选择通过第三方账号登录或者自己注册一个,方便起见我直接用了Github账号。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第1张图片

2.创建仓库

登录后点击左侧的 Add new Repository按钮 跳转到创建仓库的页面,Name一栏填写仓库的名字,这里我写的是maven,仓库类型选 Maven ,创建完成后仓库就可以使用了。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第2张图片

3.GPG签名

GPG(GnuPG)是一款非对称加密软件,上传的Jar包需要用GPG生成签名文件,否则是不能同步到MavenCentral的,使用GPG给文件签名需要有公钥,可以用Bintray提供的默认的公钥或者使用自己生成的公钥,以下两种方法二选一。

3.1.使用Bintray公共密钥

该方法比较便捷,不需要进行生成密钥等繁琐操作。首先进入你创建的仓库页面,点击 Edit ,进入编辑页面。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第3张图片

然后勾选如图所示的选项,当你上传Jar文件时系统就会自动帮你生成签名文件。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第4张图片

3.2.使用个人密钥

首先需要下载 GnuPG ,以MacOS为例,下载 GnuPG for OS X

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第5张图片

下载安装完成后测试下是否可用:

gpg2 --version

生成key,过程中需要依次输入Name,Email,Passphase,其中email会作为你的用户ID。需要注意的是如果设置了Passphase,Bintray就无法对你的上传的文件自动签名。

gpg2 --gen-key

查看刚才生成的key:

gpg2 --list-keys
如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第6张图片

然后把公钥 发布到服务器:

gpg2 --keyserver hkp://ha.pool.sks-keyservers.net --send-keys [email protected]

在发布过程中我遇到了 gpg: keyserver send failed: No route to host的错误,解决方法是多试几个地址,下面是几个候选地址:

  • pool.sks-keyservers.net
  • ha.pool.sks-keyservers.net
  • p80.pool.sks-keyservers.net:80

导出公钥和私钥:

gpg2 --armor --export [email protected] > public_key_sender.asc
gpg2 --armor --export-secret-key [email protected] > private_key_sender.asc

然后回到Bintray的界面,点击右上角导航栏的头像,点击 Edit Profile

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第7张图片

跳转到以下页面,点击GPG Signing。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第8张图片

把刚才导出的公钥和私钥粘贴进去,包括虚线的两行文本,然后点击 Update。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第9张图片

回到仓库页面,点击Edit。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第10张图片

开启自动签名功能,配置就完成了。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第11张图片

4.创建Sonatype账号

前往 issues.sonatype.org/login.jsp 进行注册。

5.申请权限

第一次登录时会让你设置语言、头像等信息,按需设置。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第12张图片

到如下图所示步骤时,选择中间的 Create an issue

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第13张图片

在跳转的页面中如下图所示填写。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第14张图片

接下来要填写项目相关的一些信息,这里说明一下几个必填项:

  • Summary - 项目简介
  • Group Id - 如果你有自己的域名就可以填在这里,比如io.spring,或者com.github.xxx,如果你填了自己的域名,提交申请后Sonatype的人会向你确认你拥有这个域名
  • Project URL - 项目的网站地址
  • SCM url - git或svn仓库地址

点击Create提交你的申请。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第15张图片

通常第二天就能得到申请的答复,可以在Sonatype JIRA的Comments标签中查看,也会以邮件的形式发到你注册时用的邮箱中。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第16张图片

等到JIRA上Status显示成 RESOLVED ,你的仓库就能使用了。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第17张图片

6.编写Gradle脚本

万事俱备,只欠东风!准备好你的项目,把下面的Gradle脚本加入到项目中。

    buildscript {
     repositories {
                    //使用阿里的maven镜像
     maven { url 'http://maven.aliyun.com/nexus/content/groups/public'}
     }
     dependencies {
                    //引入bintray插件
     classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
     }
    }
    
    task sourcesJar(type: Jar, dependsOn: classes) {
     classifier = 'sources'
     from sourceSets.main.allSource
    }
    
    task javadocJar(type: Jar, dependsOn: javadoc) {
     classifier = 'javadoc'
     from javadoc.destinationDir
    }
    
    apply plugin: 'java-library'
    apply plugin: 'maven-publish'
    apply plugin: 'com.jfrog.bintray'
    
    def pomConfig = {
     licenses {
     license {
     name "The Apache Software License, Version 2.0"
     url "http://www.apache.org/licenses/LICENSE-2.0.txt"
     distribution "repo"
     }
     }
     developers {
     developer {
     id "developerName"
     name "developerName"
     email "[email protected]"
     }
     }
     scm {
                    //项目网站
     url "https://github.com/example"
     }
    }
    
    publishing {
     publications {
     MyPublication(MavenPublication) {
     from components.java
     artifact sourcesJar
     artifact javadocJar
     groupId 'com.example'
     artifactId 'projectName'//com.example.projectName
     version alohaVersion
     pom.withXml {
     def root = asNode()
     root.appendNode('description', 'project description')
     root.appendNode('name', 'projectName')
     root.appendNode('url', 'https://github.com/example')
     root.children().last() + pomConfig
     }
     }
     }
    }
    
    bintray {
     user = BINTRAY_USER//bintray的用户名,即显示在导航栏右侧的名字
     key = BINTRAY_KEY//Api key,见下文
     publications = ['MyPublication']//关联到上文maven publication的名字
     publish = true//如果false,还需要到网页上手动发布
     pkg {
     repo = 'maven'
     name = 'projectName'
     licenses = ['Apache-2.0']
     vcsUrl = 'https://github.com/example.git'
     labels = ['java', 'spring', 'example']
     version {
     name = '1.0.0-FINAL'
     desc = 'description'
     released = new Date()
     vcsTag = '1.0.0-FINAL'
     mavenCentralSync {
     sync = true//是否同步到中央仓库
     user = OSSRH_USER//见下文
     password = OSSRH_PASSWORD//见下文
     }
     }
     }
    }

其中 BINTRAY_KEY 的值设为Api key,从下图所示位置获取:

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第18张图片

OSSRH_USEROSSRH_PASSWORD (OSSRH = Open Source Software Repository Hosting ) 需要到以下地址查看:

https://oss.sonatype.org

使用你的Sonatype账号登录,点击 Profile

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第19张图片

点击 Access User Token 查看你的Token:

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第20张图片

左边输入框是你的username,右边是你的密码,建议把账号有关的信息从环境变量中读取,不要提交到VCS中。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第21张图片

7.发布

执行gradle命令进行发布:

./gradlew bintrayUpload

首次发布时如果Gradle设置了同步到MavenCentral,那么会出现以下的错误提示:
> Could not sync 'pojozhang/maven/com.example:projectName/1.0.0-FINAL' to Maven Central: HTTP/1.1 403 Forbidden [message:In order to sync to Maven Central your package must be included in the JCenter repository]

让我们回到Bintray上之前创建的maven仓库,这时你能在仓库的页面看到你刚才上传的包了,类似下图:

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第22张图片

点击包名,跳转后,在页面的右侧你会找到 Add to JCenter 的按钮,点击它继续跳转。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第23张图片

你可以填写一些信息,也可以直接点击Send,过一段时间,系统会发送邮件提示你申请已经通过。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第24张图片

再回到刚才包的页面,点击 Maven Central,输入你的Sonatype的Token信息点击Sync,就可以完成同步了。第一次同步成功后,Sonatype也会通过邮件告知你 。

如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral_第25张图片

以后再发布新版本的时候直接执行Gradle命令就行了。同步完成后可以马上在 https://oss.sonatype.org 进行搜索,但是 https://mvnrepository.com/ 的搜索并不是实时的,需要等待一段时间,通常搜索结果第二天就能更新。

结尾

有几个点要注意:

  1. 上传到Sonatype的文件无法被删除,要更新文件只能上传新的版本,Bintray上的文件可以自由删除。
  2. Sonatype的几个网址比较难找,最好记一下。
  3. 账号不要提交到VCS中。
  4. 欢迎补充!

你可能感兴趣的:(如何使用Gradle发布Jar文件到Bintray并同步到MavenCentral)