zoukankan      html  css  js  c++  java
  • Mac使用Gradle上传jar到中央仓库(最完整的采坑记录)

    前言

    当我们封装完成我们自己做的工具之后,那我们肯定想要发给别人让别人来进行使用,上传到中央仓库是一种引入时最方便的选择。

    网上有很多教程,但是大多都是maven和windows的环境。

    今天就来记录一下,在mac上使用gradle上传jar到mvn中央仓库所要踩的坑。

    大致步骤

    1、注册issues.sonatype.org
    2、创建issue
    3、根据issue完成相应操作
    4、生成公钥私钥并上传
    5、签名打包
    6、上传审核
    7、下载验证

    下面是详细过程

    注册并创建issue

    首先进issues.sonatype.org,然后进行注册,一定要记住用户名密码
    完成登录进去创建issue


    注意项:group id如果是自己的域名,就像我这样,那么他会要求让你验证这个域名是否属于你,需要修改dns中的txt类型为一个固定值,他会在issue反馈的时候提出

    如果你没有自己的域名,建议直接使用com.github.你的名字,这样的group id,这样不需要验证


    创建完成issue之后就根据issue提出的要求一步步完成

    需要把你的包发布到snapshot和release仓库去,在这之前你需要生成一个gpg格式的公钥和私钥,用于打包的时候进行签名。

    生成公钥和私钥

    PS:当前使用的MacOS,windows网上有对应的方法

    首先下载工具并安装
    https://gpgtools.org/
    下载之后不要用界面生成,使用命令行操作,操作如下:

    1、首先查看是否正确安装
    gpg --version

    2、生成公钥对
    gpg --gen-key
    根据提示操作,输入密码的时候注意别忘了

    3、查看生成的秘钥对
    gpg --list-keys --keyid-format short

    出现如下所示:


    pub rsa2048/00CBBEC9 2019-01-15 [SC] [expires: 2021-01-14]
    ADCBD7F4329E51312B8C28641881FCD00DCBBEC9
    uid [ultimate] LinkinStar linkinstar@foxmail.com
    sub rsa2048/50182126 2019-01-15 [E] [expires: 2021-01-14]

    其中的00CBBEC9后面有用,我们暂时称为编号

    4、导出私钥
    gpg --export-secret-keys -o secring.gpg
    会在你当前目录生成一个secring.gpg
    这个后面有用

    5、同步公钥到公网
    gpg2 --keyserver hkp://keyserver.ubuntu.com --send-keys 00CBBEC9
    别人需要用公钥去验证是你的签名,注意00CBBEC9为上面你的编号

    上传jar

    配置build.gradle,在后面加上如下代码

    plugins {
        id 'java'
        // 主要是下面两个插件要加上
        id 'maven-publish'
        id 'signing'
    }
    
    task sourcesJar(type: Jar) {
        from sourceSets.main.allJava
        classifier = 'sources'
    }
    
    task javadocJar(type: Jar) {
        from javadoc
        classifier = 'javadoc'
    }
    
    javadoc {
        options{
            encoding "UTF-8"
            charSet 'UTF-8'
        }
    }
    
    publishing {
        publications {
            mavenJava(MavenPublication) {
                groupId project.group
                artifactId project.name
                version "${version}"
                from components.java
                artifact sourcesJar
                artifact javadocJar
    
                // https://docs.gradle.org/current/dsl/org.gradle.api.publish.maven.MavenPublication.html
                pom {
                    name = "http-helper(你的项目名称)"
                    description = "easy to send http request(你的项目描述)"
                    url = "https://github.com/LinkinStars/http-helper"
                    licenses {
                        license {
                            name = "The Apache License, Version 2.0"
                            url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
                        }
                    }
                    developers {
                        developer {
                            id = "LinkinStar(开发者id)"
                            name = "LinkinStar(开发者名称)"
                            email = "linkinstar@foxmail.com(你的邮箱)"
                        }
                    }
                    scm {
                        connection = "scm:git:https://github.com/LinkinStars/http-helper(你的源码地址)"
                        developerConnection = "scm:git:https://github.com/LinkinStars/http-helper(你的源码地址)"
                        url = "https://github.com/LinkinStars/http-helper(你的源码地址)"
                    }
                }
            }
        }
        repositories {
            maven {
                def releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2"
                def snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots"
                // 如果version以SNAPSHOT结尾就会上传到快照仓库,如果不是就上传到release仓库
                url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
                credentials {
                    username = "${NEXUS_USERNAME}"
                    password = "${NEXUS_PASSWORD}"
                }
            }
    
        }
    }
    
    signing {
        sign publishing.publications.mavenJava
    }

    配置gradle.properties
    NEXUS_USERNAME=你注册issues.sonatype.org的用户名
    NEXUS_PASSWORD=你注册issues.sonatype.org的密码

    signing.keyId=00CBBEC9(你的公钥编号)
    signing.password=(你的私钥密码)
    signing.secretKeyRingFile=/Users/LinkinStar/Downloads/secring.gpg(你的私钥存放路径)

    然后使用publish发布,就是执行gradle的任务

    如果没有报错就上传成功了,注意先上传snapshot版本

    确认上传成功,并上传release版本

    进入https://oss.sonatype.org/content/repositories/snapshots/
    按照group id去查询你的快照版本是否已经上传成功

    如果发现已经上传成功,那么证明你成功一半了。
    然后根据前一步骤进行release版本的上传

    上传如果没有问题,就要正式发布了

    登录以下网址查看
    https://oss.sonatype.org
    在右上角有个登录,使用issues.sonatype.org注册的用户名密码登录
    然后在左边找到

    然后在右边的窗口中找到你刚才上传的release版本,应该在最下方

    选中之后,点击close

    然后在下方的activity窗口中可以看到close的过程,如果出现下方这样的情况就失败了,下方失败的原因是因为前面验证错误,原因是没有将公钥同步到公网

    close成功之后,选中之后,点击close旁边的release按钮即可
    过一段时间你可以在https://oss.sonatype.org/service/local/staging/deploy/maven2 查看到你上传的包了

    通知审核

    到这里位置我们已经完成全部上传的工作了,记得我们一开始提交的issue吗?
    我们现在要告诉管理员我们已经上传完成了然后他会帮我们审核通过,这只是第一次需要这样做,以后就不需要 了。

    收到最后的反馈就说明全部成功了,等待两个小时左右,你就可以从中央仓库找到你上传的jar包了。这个时间有长有短。
    然后再等一天左右的时间,你能在mvn的中央仓库网站上看到你的jar了。

    坑总结

    1、不要使用mac的gpg页面进行导出,导出的文件不是我们使用的私钥文件格式不正确
    2、version很重要只有以SNAPSHOT结尾的才能正常上传到快照仓库
    3、注意公钥一定记得同步到公网上去,不然签名验证会失败
    4、晚上中央仓库网速不太好,因为国外这个时候用的人多,白天速度快一些,容易上传


    作者:LinkinStar

    未经允许,不能转载

    https://www.cnblogs.com/linkstar/p/10289584.html

  • 相关阅读:
    poj 2777 Count Color
    poj 3264 Balanced Lineup
    hdu 1754 I hate it
    poj 3468 A Simple Problem with Integers
    noip 2013 提高组 Day2 部分题解
    [c/c++]指针(2)
    [c/c++]指针(1)
    vijos 1360 八数码问题
    [复习]快速幂算法
    noip 2013 提高组 day1
  • 原文地址:https://www.cnblogs.com/linkstar/p/10289584.html
Copyright © 2011-2022 走看看