一、前言

最近自己在学习Spring boot的过程中开发了一个组件 multithreadpool-spring-boot-starter,通过这个组件,我们可以动态根据配置文件进行多个线程池的初始化。既然有这个产出后,肯定是希望能够上传到maven中央仓库,给更多的人使用,于是就产生了这次项目发布经历。

整个过程可谓是一波三折,由于平时工作比较忙只能晚上花一个小时搞,所以在经历了近一周的时间后,终于成功发布上去了。

下面把我当时的上传过程记录下来,希望帮助更多的朋友。

二、环境准备

1> mac osx 10.14.6 : 本文主要以mac环境为准

2> Apache Maven 3.2.3 : 本文主要使用maven进行构建和发布例子的说明

三、步骤说明

1、工单创建

1> 访问sonatype并注册账号 https://issues.sonatype.org ,注意要记住账号密码,会用于我们后续的发布及相关操作

2> 如图新建一个issue,项目需要选择 Community Support - Open Source Project Repository Hosting

3>  参考下图填写概要、Group Id、项目地址、代码管理地址,填写后点击确认提交。网上很多都说需要几个小时或者隔天才有回复,我当时等了10分钟就收到回复了。此时,对方跟你说两件事情:

  • 【提醒】确保 group id对应的域名是你的
  • 【校验】比如我是的项目地址是github上的,他会要求我在github上创建一个和issue同名的项目确保我拥有该项目的管理权限,

完成确认并创建和issue同名的项目后,记得要在issue进行回复,具体参考: sonatype-issue 和 Github仓库

4> 在通过上述的确认和校验后,sonatype会回复你到时候maven发布会用到的snapshot地址和release地址,并提醒你首次发布后需要回复该issue,详情参考issue

2、gpg 环境安装

gpg的主要作用是生成密钥对,会用于后续我们组件发布的校验。

1> 下载地址:https://www.gnupg.org/download/

2> 如图红色框所示下载并安装

3> 在安装完成后,执行以下命令生成密钥对,按照提示输入账号、邮箱、密码 (PS: 此处的密码在后面发布会用到,请务必记住)

gpg2 --gen-key 

4> 执行命令查看密钥, 此时控制台会输出类似下面的内容

$ gpg2 --list-keys 
...

pub rsa2048 2019-04-12 [SC] [有效至:2021-04-11]
  9A1640F7A2551131612D51B12D83594B7B29D86A
  uid [ 绝对 ] xiaoxuetu <xiaoxuetu@163.com>
  sub rsa2048 2019-04-12 [E] [有效至:2021-04-11]

5> 执行以下命令将公钥发布到服务器中

$ gpg --keyserver hkp://subkeys.pgp.net --send-keys 9A1640F7A2551131612D51B12D83594B7B29D86A
...
gpg: 正在发送密钥 2D83594B7B29D86A 到 hkp://subkeys.pgp.net
gpg: 发送至公钥服务器失败:Server indicated a failure
gpg: 发送至公钥服务器失败:Server indicated a failure

6> 如果控制台输出如上面类似的错误内容,则将命令中的密钥调整为 2D83594B7B29D86A

$ gpg --keyserver hkp://subkeys.pgp.net --send-keys 2D83594B7B29D86A

gpg: sending key 2D83594B7B29D86A to hkp://pool.sks-keyservers.net

 

3、Maven全局配置

一般情况下,maven全局配置存在于 ${HOME}/.m2/setting.xml ,如果这个目录下没有,则可以从 ${MAVEN_HOME}/conf/setting.xml 拷贝一份到 ${HOME}/.m2 目录下并进行以下修改

1> 添加服务器验证信息

    <server>
<id>sonatype_releases</id>
<username>your user name</username>
<password>your password</password>
</server>
<server>
<id>sonatype_snapshots</id>
<username>your user name</username>
<password>your password</password>
</server>

2> 配置gpg验证命令

<settings>
<profiles>
<profile>
<id>gpg</id>
<properties>
<!-- 由于我电脑安装的是gpg2,不存在gpg命令,所以需要指定执行gpg2,否则会报错 -->
<gpg.executable>gpg2</gpg.executable>
<gpg.passphrase>your password</gpg.passphrase>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>gpg</activeProfile>
</activeProfiles>
</settings>

4、项目maven配置

1> 在项目的pom.xml中,配置相应的开源协议、仓库信息、开发人员信息和发布配置

<!-- 开源签名证书 -->
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses> <!-- 仓库信息 -->
<scm>
<connection>scm:git:git@github.com:xiaoxuetu/multithreadpool-spring-boot-starter.git</connection>
<developerConnection>scm:git:git@github.com:xiaoxuetu/multithreadpool-spring-boot-starter.git
</developerConnection>
<url>http://github.com/xiaoxuetu/multithreadpool-spring-boot-starter/tree/master</url>
</scm> <!-- 开发人员信息 -->
<developers>
<developer>
<name>xiaoxuetu</name>
<email>xiaoxuetu@163.com</email>
<organization>https://github.com/xiaoxuetu</organization>
<timezone>+8</timezone>
</developer>
</developers> <!-- 发布管理信息 -->
<distributionManagement>
<repository>
<!-- 这里的id必须要和全局配置中的release id 一致 -->
<id>sonatype_releases</id>
<name>Nexus Release Repository</name>
<!-- 这里就是在创建issue成功后,对方回复的release发布地址-->
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
</repository>
<snapshotRepository>
<!-- 这里的id必须要和全局配置中的snapshot id 一致 -->
<id>sonatype_snapshots</id>
<name>Nexus Snapshot Repository</name>
<!-- 这里就是在创建issue成功后,对方回复的snapshot发布地址-->
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>

2> 由于发布到maven中央仓库会要求我们在上传jar到同时,必须同步发布对应到Javadoc、source、asc(利用gpg生成到校验),所以需要在maven中添加以下构建插件

    <build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.7</version>
<extensions>true</extensions>
<configuration>
<!-- 这里的id必须要和全局配置中的release id 一致 -->
<serverId>sonatype_releases</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<!-- 如果希望发布后自动执行close和release操作,此处可以调整为true -->
<autoReleaseAfterClose>false</autoReleaseAfterClose>
</configuration>
</plugin> <!-- 生成java source.jar -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin> <!-- 生成asc 校验文件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<!-- 必须和配置中的gpg校验id一致 -->
<id>gpg</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

5、发布操作

1> 执行以下命令进行发布(如果 pom.xml 中 autoReleaseAfterClose 的值为true,则脚本会自动完成在平台上close、release的操作,至此你将成功发布了,否则我们继续查看第2步)

 mvn clean javadoc:jar deploy -P release

2> 登录https://oss.sonatype.org,然后选择staging Repositories

3> 如下图搜索并选择需要发布的组件,依次执行Close、Release操作

4> 如果Release成功,并且你是首次发布组件,则需要到你创建到issue中回复 “我已经成功发布该组件”,经历大概2小时后,该组件将会同步到对应的maven仓库

5> 如果Close或者Release不成功,你可以如下图操作查看原因并谷歌定位,或者回复咨询

四、参考文档

1> 发布构件到 Maven 中央仓库遇到的坑: https://juejin.im/post/5cb03e1a5188251b0e4e3583

2> Working with PGP Signatures: https://central.sonatype.org/pages/working-with-pgp-signatures.html#distributing-your-public-key

3> Deploying to OSSRH with Apache Maven: https://central.sonatype.org/pages/apache-maven.html

Maven中央仓库发布历程的更多相关文章

  1. 喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库

    相信通过java和SQLServer开发应用的同学们都经历过如下类似的问题. 微软提供的JDBC官方驱动没有放置在Maven仓库中,这样如果你的Java应用需要访问SQL Server,你不得不下载s ...

  2. 贡献你的代码,将jar包发布到Maven中央仓库以及常见错误的解决办法

    前几天将自己的日志工具发布到了Maven中央仓库中.这个工具本省没有多少技术含量,因为是修改别人的源代码实现的,但是将jar发布到Maven仓库却收获颇丰,因为网上有些教程过时了,在此分享下自己发布j ...

  3. 如何发布jar包到maven中央仓库

    自使用maven以来,没少使用maven中央仓库中的各种jar包,方便有效,但是咱们也不能总是只取不予,也应该懂得奉献,当你写好了一个十分好用的jar包,想贡献出去给大家使用的时候,应该怎么做呢?当然 ...

  4. 如何将JAR包发布到Maven中央仓库?

    将jar包发布到Maven中央仓库(Maven Central Repository),这样所有的Java开发者都可以使用Maven直接导入依赖,例如fundebug-java: <!-- ht ...

  5. 如何发布自己的 jar 包到 maven 中央仓库(待更新...)

    参考链接 如何发布自己的 jar 包到 maven 中央仓库

  6. Maven系列(十)发布自己的项目到 Maven 中央仓库

    Maven 发布自己的项目到 Maven 中央仓库 可能很多人都在用 Maven 仓库,但是如果要问怎么发布项目到中央仓库,估计很多人都不知道了,下面本篇文章带大家往中央仓库发布一个自己的 Maven ...

  7. 将项目发布到Maven中央仓库的不完整纪要

    背景 有几个Utils性质的Jar需要跨项目引用,原本想部署私有Maven仓库,后来感觉太麻烦,索性直接发布到中央库,引用时也方便. 发布成功之后,觉得某些细节还是有必要记录一下. 资源 Sonaty ...

  8. 如何将自己的代码发布到Maven中央仓库?

    去年在公司做工作流相关业务时,当时使用flowable做引擎,中途涉及到一些业务上的需求,自己整理了一些代码,考虑到开源精神,当时就想着将于公司业务无关的代码抽离出来,放到Maven中央仓库中,以供别 ...

  9. Dev 日志 | 如何将 jar 包发布到 Maven 中央仓库

    摘要 Maven 中央仓库并不支持直接上传 jar 包,因此需要将 jar 包发布到一些指定的第三方 Maven 仓库,比如:Sonatype OSSRH 仓库,然后该仓库再将 jar 包同步到 Ma ...

随机推荐

  1. 【Aizu - ALDS1_1_C】Prime Numbers(素数筛法)

    Prime Numbers  Descriptions: A prime number is a natural number which has exactly two distinct natur ...

  2. 《实战Java高并发程序设计》读书笔记

    文章目录 第二章 Java并行程序基础 2.1 线程的基本操作 2.1.1 线程中断 2.1.2 等待(wait)和通知(notify) 2.1.3 等待线程结束(join)和谦让(yield) 2. ...

  3. PATB 1019. 数字黑洞 (20)

    一个神奇的数字. 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定任一个各位数字不完全相同的4位正整数,如果我 ...

  4. Python向FTP服务器上传文件

    上传 代码示例: #!/usr/bin/python # -*- coding:utf-8 -*- from ftplib import FTP ftp = FTP() # 打开调试级别2, 显示详细 ...

  5. asp.net core 2.2 生产环境直接更新View页面并立即生效

    有的时候我们会直接在生产环境上更新页面文件,比如更改了JS代码,CSS代码或页面的文案,布局等.这种没有改到后台代码的情况一般就是直接发布页面文件了,在asp.net core 2.2以前的版本(没有 ...

  6. JAVA获取项目工程下的文件

    JAVA获取 工程下的文件  其实很简单主要是理解编译路径  ①class.getResource public static void main(String[] args) { WordTest ...

  7. python3 连接数据库注意点

    类库:pymysql ''' Created on 2019年 @author: Root ''' import pymysql from name import getName # 数据库连接信息 ...

  8. struts2入门Demo

    一.引入必要的jar包,所需jar包如下: 二.配置web.xml.主要目的是拦截请求 <?xml version="1.0" encoding="UTF-8&qu ...

  9. 嗨,你真的懂this吗?

    this关键字是JavaScript中最复杂的机制之一,是一个特别的关键字,被自动定义在所有函数的作用域中,但是相信很多JvaScript开发者并不是非常清楚它究竟指向的是什么.听说你很懂this,是 ...

  10. Linux日志系统分析:rsyslog、syslog和klog

    参考博客: https://blog.csdn.net/lidonghat/article/details/55004280 https://blog.csdn.net/u012247418/arti ...