gpg加密发布jar包到maven中央仓库详细过程以及踩的坑

最近为了提升逼格,当然主要是为了便于之后使用,我尝试将自己写的jar包发布到maven中央仓库,历时一个月的摸爬滚打,最终成功发布!!!
现在我把发布的详细过程以及踩到的坑分享一下,与君共勉!

1.注册sonatype并提交issue工单

maven中央仓库是由sonatype提供的免费维护,要上传jar到maven中央仓库就必须注册一个sonatype账号
注册网址:https://issues.sonatype.org/secure/Signup!default.jspa
注册完成后,进入 https://issues.sonatype.org 创建一个issue,如下
gpg加密发布jar包到maven中央仓库详细过程以及踩的坑_第1张图片
点击create,创建工单,按实际情况填写工单
gpg加密发布jar包到maven中央仓库详细过程以及踩的坑_第2张图片
这里主要是Group Id的填写,使用com.github.xxx是最快的,若使用私有域名会需要认证。
创建完成后,点击【Issues】选择刚刚新建的工单,可以看到状态为Waiting for Response或Open,此时为待审核状态。

2.认证域名

为了高逼格,我没有满足于使用com.github.xxx作为Group Id,而是在腾讯云买了个qinpiyi.com的域名(domain)。提交issue工单后几个小时后收到了一封邮件,内容如下
gpg加密发布jar包到maven中央仓库详细过程以及踩的坑_第3张图片
我选择了第一种方式(添加一条TXT记录)来认证我的域名,具体步骤如下:
1.打开腾讯云控制台,进入域名服务—>我的域名—>域名列表,找到要认证的域名,点击“解析”开始解析域名:
gpg加密发布jar包到maven中央仓库详细过程以及踩的坑_第4张图片
2.域名解析列表—>记录管理—>添加记录
gpg加密发布jar包到maven中央仓库详细过程以及踩的坑_第5张图片
3.主机记录选择 【*】 (泛解析),记录类型选择【TXT】,线路类型选择【境外】,记录值输入邮件中提到的JIRA ticket,然后点击保存,这样便完成了一条TXT记录的添加。
在这里插入图片描述
4.最后一步,我分别用邮件和评论工单(Comment)的方式做了回复,内容如下
I do own the domain qinpiyi.com. I have added a TXT record(OSSRH-46932) to my DNS .
最多几个小时之后,会收到审核通过的邮件,工单状态也变为了【RESOLVED】,即为通过了域名的认证!
gpg加密发布jar包到maven中央仓库详细过程以及踩的坑_第6张图片

坑一:我当时添加了TXT记录之后,由于一直没有用Comment或邮件的方式告知对方,导致过了好多天都没能收到认证通过的通知!

3. GPG生成密钥

  1. 下载安装GPG环境
    下载地址:https://www.gpg4win.org/
  2. 检查是否安装成功
    打开cmd命令行窗口,输入
    gpg --version
    执行后成功输出gpg版本即为安装成功
  3. 生成密钥
    命令行执行
    gpg --gen-key
    根据提示输入用户名和邮箱以及Passphase,其余信息使用默认即可,Passphase即为密码,需记住,后续上传jar包时要用到
  4. 查看公钥
    执行
    gpg --list-keys
    输出如下信息
    C:\Users\Administrator>gpg --list-keys
    C:/Users/Administrator/AppData/Roaming/gnupg/pubring.kbx
    --------------------------------------------------------
    pub   rsa2048 2019-03-25 [SC]
          23EE7FF80A076D26671731FA69D245B71877DC6A
    uid           [ultimate] qinpiyi 
    sub   rsa2048 2019-03-25 [E]
    
    其中的十六进制串23EE7FF80A076D26671731FA69D245B71877DC6A即为生成的公钥id
  5. 发布公钥
    执行
    gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 23EE7FF80A076D26671731FA69D245B71877DC6A
    将公钥发布到PGP密钥服务器后,便可以使用本地的私钥来对上传构件进行数字签名,而下载该构件的用户可通过上传的公钥来验证签名,也就是说,大家可以验证这个构件是否由本人上传的,因为有可能该构件被坏人给篡改了。
    6.验证是否发布成功
    执行
    gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 23EE7FF80A076D26671731FA69D245B71877DC6A
    成功输出gpg密钥信息即为发布成功

4. 制作jar包

这里我选择使用maven来构建jar包

  1. 在maven安装目录的config文件夹下打开setting.xml,如下在servers标签中添加内容

    
    	
    		sonatype-qinpiyi
    		你的sonatype用户名
    		你的sonatype密码
    	
      
    

    这里id将在pom中使用,可随意命名。

  2. 在Maven项目的pom.xml中添加licenses、developers、scm、profiles、plugins、distributionManagement等内容,如下是我的pom,大家可以参考

    
    
        4.0.0
    
        com.qinpiyi.common
        common-response
        0.0.1
        https://github.com/qinpiyi/common
    
        common-response
        CommonResponse and CommonResponseUtils
    
        
            UTF-8
        
    
        
            
                The Apache Software License, Version 2.0
                http://www.apache.org/licenses/LICENSE-2.0.txt
            
        
    
        
        
            
                qinpiyi
                [email protected]
            
        
    
        
        
            https://github.com/qinpiyi/common.git
            https://github.com/qinpiyi/common.git
            https://github.com/qinpiyi/common
        
    
        
            
                
                release
                
                    
                        
                        
                            org.apache.maven.plugins
                            maven-source-plugin
                            2.2.1
                            
                                
                                    package
                                    
                                        jar-no-fork
                                    
                                
                            
                        
                        
                        
                            org.apache.maven.plugins
                            maven-javadoc-plugin
                            2.9.1
                            
                                
                                    package
                                    
                                        jar
                                    
                                    
                                    
                                        -Xdoclint:none
                                    
                                
                            
                        
                        
                        
                            org.apache.maven.plugins
                            maven-gpg-plugin
                            1.6
                            
                                
                                    verify
                                    
                                        sign
                                    
                                
                            
                        
                    
                
    
                
                
                    
                        sonatype-qinpiyi
                        https://oss.sonatype.org/content/repositories/snapshots/
                    
                    
                        sonatype-qinpiyi
                        https://oss.sonatype.org/service/local/staging/deploy/maven2/
                    
                
            
        
        
    	
            
                log4j
                log4j
                1.2.17
            
            
                junit
                junit
                4.12
                test
            
        
    
    
  3. 构建jar包并上传
    在项目根目录(即pom.xml所在目录 )下命令行执行maven指令
    mvn clean deploy -P release verify '-Dgpg.passphrase=自己的GPG密码'
    -P后的release 需和pom.xml文件中profile的id一致,上传过程中可能还会提示再次输入gpg的passphrase密码,上传速度与jar包大小和网速有关,最多几分钟即可上传成功

坑2:mvn指令执行报错“编码gbk的不可映射字符”,在pom.xml中添加了

UTF-8

成功解决

5. 发布jar包

进入 https://oss.sonatype.org 并使用最开始注册的sonatype账号登录,登录成功后点击左侧的Staging Repositories,在右侧列表中找到并勾选自己刚刚上传的内容,若当前状态为open则点击上方的Close按钮,关闭成功后刷新,再次找到该条记录,勾选并点击上方的Release按钮,则发布完成。
gpg加密发布jar包到maven中央仓库详细过程以及踩的坑_第7张图片

坑3:Close失败,刷新后点击下方的Activity可以看到报错信息为缺少jar对应的.asc签名文件
解决方法:手动上传缺少的签名文件,若签名文件全部缺失,可在maven项目根目录下命令行依次执行执行下面三条mvn指令,若部分缺失则按照如下的格式编辑对应的指令
mvn gpg:sign-and-deploy-file '-Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/' '-DrepositoryId=sonatype-qinpiyi' '-DpomFile=target/qpy-common-0.0.1.pom' '-Dfile=target/qpy-common-0.0.1.jar'
mvn gpg:sign-and-deploy-file '-Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/' '-DrepositoryId=sonatype-qinpiyi' '-DpomFile=target/qpy-common-0.0.1.pom' '-Dfile=target/qpy-common-0.0.1-sources.jar' '-Dclassifier=sources'
mvn gpg:sign-and-deploy-file '-Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/' '-DrepositoryId=sonatype-qinpiyi' '-DpomFile=target/qpy-common-0.0.1.pom' '-Dfile=target/qpy-common-0.0.1-javadoc.jar' '-Dclassifier=javadoc'

其中-DrepositoryId为setting.xml中server的id,target文件夹中若无.pom文件,可将根目录下pom.xml文件复制到target文件夹中并重命名为xxx.pom文件

Release完成后,约需要等待两三个小时,在 https://search.maven.org 和 https://mvnrepository.com 便可以搜到自己发布的依赖了!!!!

参考文章:

怎样提交本地jar到Maven中央仓库(windows)
将 Smart 构件发布到 Maven 中央仓库
如何把自己的Jar包上传到 maven 官方仓库中,Maven上传图文讲解
Maven:Maven GPG Plugin。

你可能感兴趣的:(maven)