• 117698

    文章

  • 803

    评论

  • 12

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

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

 

原文出处:https://www.cnblogs.com/linkstar/p/10289584.html


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

1条评论

Loading...
  • 周涛980L

    你好,参考了你的文章中以后,我执行publish 会出现以下的报错信息: Execution failed for task ':Core:signMavenJavaPublication'. > Cannot perform signing task ':Core:signMavenJavaPublication' because it has no configured signatory 博主之前遇到这个问题吗?



自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客