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生成**
- 下载安装GPG环境
下载地址:https://www.gpg4win.org/ - 检查是否安装成功
打开cmd命令行窗口,输入gpg --version
执行后成功输出gpg版本即为安装成功 - 生成**
命令行执行gpg --gen-key
根据提示输入用户名和邮箱以及Passphase,其余信息使用默认即可,Passphase即为密码,需记住,后续上传jar包时要用到 - 查看公钥
执行gpg --list-keys
输出如下信息
其中的十六进制串23EE7FF80A076D26671731FA69D245B71877DC6A即为生成的公钥idC:\Users\Administrator>gpg --list-keys C:/Users/Administrator/AppData/Roaming/gnupg/pubring.kbx -------------------------------------------------------- pub rsa2048 2019-03-25 [SC] 23EE7FF80A076D26671731FA69D245B71877DC6A uid [ultimate] qinpiyi <aaa@qq.com> sub rsa2048 2019-03-25 [E]
- 发布公钥
执行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包
-
在maven安装目录的config文件夹下打开setting.xml,如下在servers标签中添加内容
<servers> <server> <id>sonatype-qinpiyi</id> <username>你的sonatype用户名</username> <password>你的sonatype密码</password> </server> </servers>
这里id将在pom中使用,可随意命名。
-
在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>aaa@qq.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>
-
构建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.org 和 https://mvnrepository.com 便可以搜到自己发布的依赖了!!!!
参考文章:
怎样提交本地jar到Maven*仓库(windows)
将 Smart 构件发布到 Maven *仓库
如何把自己的Jar包上传到 maven 官方仓库中,Maven上传图文讲解
Maven:Maven GPG Plugin。
上一篇: Mysql 分区详解
下一篇: 实战mysql分区(PARTITION)