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,如下
在这里插入图片描述
点击create,创建工单,按实际情况填写工单
在这里插入图片描述
这里主要是Group Id的填写,使用com.github.xxx是最快的,若使用私有域名会需要认证。
创建完成后,点击【Issues】选择刚刚新建的工单,可以看到状态为Waiting for Response或Open,此时为待审核状态。

2.认证域名

为了高逼格,我没有满足于使用com.github.xxx作为Group Id,而是在腾讯云买了个qinpiyi.com的域名(domain)。提交issue工单后几个小时后收到了一封邮件,内容如下
在这里插入图片描述
我选择了第一种方式(添加一条TXT记录)来认证我的域名,具体步骤如下:
1.打开腾讯云控制台,进入域名服务—>我的域名—>域名列表,找到要认证的域名,点击“解析”开始解析域名:
在这里插入图片描述
2.域名解析列表—>记录管理—>添加记录
在这里插入图片描述
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】,即为通过了域名的认证!
在这里插入图片描述

坑一:我当时添加了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 <qinpiyi@126.com>
    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标签中添加内容

    <servers>
    	<server>
    		<id>sonatype-qinpiyi</id>
    		<username>你的sonatype用户名</username>
    		<password>你的sonatype密码</password>
    	</server>
      </servers>
    

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

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

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.qinpiyi.common</groupId>
        <artifactId>common-response</artifactId>
        <version>0.0.1</version>
        <url>https://github.com/qinpiyi/common</url>
    
        <name>common-response</name>
        <description>CommonResponse and CommonResponseUtils</description>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <licenses>
            <license>
                <name>The Apache Software License, Version 2.0</name>
                <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
            </license>
        </licenses>
    
        <!-- 根据自己实际情况填写 -->
        <developers>
            <developer>
                <name>qinpiyi</name>
                <email>qinpiyi@126.com</email>
            </developer>
        </developers>
    
        <!-- 与申请issue时填写的SCM保持一致 -->
        <scm>
            <connection>https://github.com/qinpiyi/common.git</connection>
            <developerConnection>https://github.com/qinpiyi/common.git</developerConnection>
            <url>https://github.com/qinpiyi/common</url>
        </scm>
    
        <profiles>
            <profile>
                <!-- 这个id就是打包时的 -P 参数 -->
                <id>release</id>
                <build>
                    <plugins>
                        <!-- Source插件-->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-source-plugin</artifactId>
                            <version>2.2.1</version>
                            <executions>
                                <execution>
                                    <phase>package</phase>
                                    <goals>
                                        <goal>jar-no-fork</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                        <!-- Javadoc插件 -->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-javadoc-plugin</artifactId>
                            <version>2.9.1</version>
                            <executions>
                                <execution>
                                    <phase>package</phase>
                                    <goals>
                                        <goal>jar</goal>
                                    </goals>
                                    <!-- -Xdoclint:none 是为了避免生成apidoc的时候检查过于严格而报错-->
                                    <configuration>
                                        <additionalparam>-Xdoclint:none</additionalparam>
                                    </configuration>
                                </execution>
                            </executions>
                        </plugin>
                        <!-- GPG加密插件 -->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-gpg-plugin</artifactId>
                            <version>1.6</version>
                            <executions>
                                <execution>
                                    <phase>verify</phase>
                                    <goals>
                                        <goal>sign</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </build>
    
                <!-- snapshotRepository与repository的id应与setting.xml中添加的server的id一致 -->
                <distributionManagement>
                    <snapshotRepository>
                        <id>sonatype-qinpiyi</id>
                        <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
                    </snapshotRepository>
                    <repository>
                        <id>sonatype-qinpiyi</id>
                        <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                    </repository>
                </distributionManagement>
            </profile>
        </profiles>
        
    	<dependencies>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>
    
  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中添加了

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding

成功解决

5. 发布jar包

进入 https://oss.sonatype.org 并使用最开始注册的sonatype账号登录,登录成功后点击左侧的Staging Repositories,在右侧列表中找到并勾选自己刚刚上传的内容,若当前状态为open则点击上方的Close按钮,关闭成功后刷新,再次找到该条记录,勾选并点击上方的Release按钮,则发布完成。
在这里插入图片描述

坑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.orghttps://mvnrepository.com 便可以搜到自己发布的依赖了!!!!

参考文章:

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

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值