Maven是Java中最常用的依赖管理工具,Maven的中央仓库保罗万象,涵盖了各个领域的框架、工具和文档,也是Java生态强大生命力的体现。我们自己开发的一些有用有趣的代码也可以通过打包上传到maven中央仓库的方式分享给他人,也为开源社区做了贡献。本文记录了上传bloomfilter算法实现代码的大概过程,如对bloomfilter感兴趣请参考:https://github.com/wxisme/bloomfilter

考虑到他人使用的可靠性,建议在上传之前做全面测试。

提交工单

首先要向sonatype提交工单,请求创建一个新的项目,如果你没有账号可以先注册一个,记住账户和密码。登录成功后Create

Project:Community Support - Open Source Project Repository Hosting
Issue Type:New Project Summary:bloomfilter
Group Id:com.github.wxisme
Project URL:https://github.com/wxisme/bloomfilter
SCM url:https://github.com/wxisme/bloomfilter.git Already Synced to Central:默认no

其他内容可以不用填写,提交后等待工作人员review,如果提供的信息没有问题的话,很快(美国工作时间里的几分钟)状态就会由open变为resolved

页面下面会有一条评论提供了许多接下来操作的信息,可以参考,注意最后一句。如果你已经接下来已经发布成功,可以添加评论和工作人员说明。

Maven相关配置

在你要发布的工程的pom文件里引入oss-parent父依赖,可以省去一些发布配置:

<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>7</version>
</parent>

接着在pom中完善license、scm、developer的信息:

<licenses>
<license>
<name>GNU Lesser General Public License Version 3</name>
<url>http://www.gnu.org/licenses/lgpl.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<scm>
<tag>master</tag>
<url>https://github.com/wxisme/bloomfilter.git</url>
<connection>scm:git:https://github.com/wxisme/bloomfilter.git</connection>
<developerConnection>scm:git:https://github.com/wxisme/bloomfilter.git</developerConnection>
</scm>
<developers>
<developer>
<name>Wang Xu</name>
<email>xxx@xxx.com</email>
<organization>xxx</organization>
</developer>
</developers>

然后打开Maven的settings.xml配置文件,配置sonatype账号信息,注意别加错地方:

<servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>Sonatype 账号</username>
<password>Sonatype 密码</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>Sonatype 账号</username>
<password>Sonatype 密码</password>
</server>
</servers>

配置gpg-key

gpg-key是用来对代码、二进制包进行签名校验用的,使用起来非常简单,可以通过这篇文章了解一下。

windows系统可以通过https://www.gpg4win.org/download.html下载安装,mac和linux可以直接通过命令安装,例如mac安装命令:

brew install gpg

Linux安装命令:

# Debian / Ubuntu 环境
sudo apt-get install gnupg # Fedora / CentOS环境
yum install gnupg

安装好后就可以开始生成私钥和公钥了,命令行执行:

gpg --gen-key

之后每一步会有提示,如果你不了解可以全部默认,也可以参考GPG入门教程,注意生成过程中需要输入一个密钥密码,需要记住。

部署

接下来就可以使用maven来部署,首先确保你的代码可以通过测试,能够打包成功,密钥密码是上一步中你输入的密码:

mvn clean deploy -P sonatype-oss-release -Darguments="gpg.passphrase=密钥密码"

如果执行失败,并且报错如下:

gpg: 签名时失败: Inappropriate ioctl for device
gpg: signing failed: Inappropriate ioctl for device

这说明你安装的gpg版本较新,需要额外配置,在gpg安装目录(mac的是~/.gnup)下建立两个配置文件:gpg.conf、gpg-agent.conf,

然后在gpg.conf添加:

use-agent
pinentry-mode loopback

在gpg-agent.conf下添加:

allow-loopback-pinentry

保存后再次执行上面的deploy命令,如果还有报错,通常情况下是你上面maven配置出了问题,检查maven配置是否有语法错误,配置的账号和密码等有无需要转义的特殊字符。还需要注意的是生成密钥和执行部署命令的必须是同一台机器。

发布

如果以上步骤都没有问题,现在构件仓库中应该有你刚才部署的构件,访问https://oss.sonatype.org/#stagingRepositories查看,一般情况下是最后一个,此时的状态应为open。现在就可以发布了,首先把上面生成的公钥上传到第三方key服务器,执行如下命令:

gpg --list-keys

pub   2048R/824B4D7A --
uid [ultimate] xxx <xxx@xxx.com>
sub 2048R/7A10AD69 --

公钥是824B4D7A,可能格式不同,可能更长,将公钥复制下来,执行如下命令:

gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 824B4D7A

如果执行成功,接下来就可以执行发布操作:

.选中你发布的模块
.点击上方的Close->Confirm
.查看Activity的状态是否为Closed,需要等待
.如果状态为Closed执行Release->Confirm,默认选中成功后自动删除
.查看Activity状态,如果被删除了,说明已经发布成功

发布操作执行完成后,可以在页面左侧点击Advanced Search:

此时你能搜到你发布的模块,说明就已经大功告成:

现在查看一下最初第一步提交的工单:

系统多出一条评论,意思是发布成功后,一般10分钟内会被发布到maven中央仓库,但要更新到search.maven.org需要2个小时,这样的话同步到国内镜像的时间会更久,你只需要耐心等待,然后再做一些必要的测试就好了。至于你发布成功后要不要通过评论告诉工作人员,那就看你心情吧:)

参考资料

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

GPG入门教程

记一次向maven中央仓库提交依赖包的更多相关文章

  1. 向maven中央仓库提交jar

    从来都是从中央仓库下载jar,这次需要向中央仓库提交jar, 利用Sonatype OSSRH可以把jar等资源提交给Maven的中央仓库. Sonatype OSSRH介绍: Sonatype OS ...

  2. 从Maven中央仓库下载jar包

    1. Maven中央仓库 Maven中央仓库存放着比较新版本比较全的 jar 包 仓库网址:https://mvnrepository.com/ 2. 使用Maven中央仓库的 jar 包 (1) 在 ...

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

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

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

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

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

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

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

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

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

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

  8. Maven中央仓库——你可能不知道的细节

    地址 —— 目前来说,http://repo1.maven.org/maven2/是真正的Maven中央仓库的地址,该地址内置在Maven的源码中,其它地址包括著名的ibiblio.org,都是镜像. ...

  9. Maven中央仓库发布历程

    一.前言 最近自己在学习Spring boot的过程中开发了一个组件 multithreadpool-spring-boot-starter,通过这个组件,我们可以动态根据配置文件进行多个线程池的初始 ...

随机推荐

  1. 深入理解Java虚拟机类加载机制

    1.类加载时机 对于类加载的第一个阶段---加载,虚拟机没有强制的约束,但是对于初始化阶段,虚拟机强制规定有且只有以下的5中情况必须开始初始化,当然,加载.验证.准备阶段在初始化前就已经开始. ①使用 ...

  2. 关于“应用程序无法启动,因为应用程序的并行配置不正确。请参阅应用程序事件日志,或使用命令行sxstrace.exe工具”问题的解决方法

    今天打开QQ管家加速版的时候突然出现了这个错误,百度了下说是系统缺少Microsoft Visual C++ 20XX(运行库),下载这个安装即可解决问题.

  3. 用user-selection实现让页面上的内容不能被选中

    最开始发现这个功能是在陌小雨的博客中,然后自己百度发现用的是user-selection功能,之前网上有很多关于禁止右键,禁止复制,禁止粘 贴,禁止剪切等都弱爆了.这个功能正好使用到我的网站上啊,(你 ...

  4. 在使用document.getElementById('xxx').files[0]时,关于计算图片大小

    在使用文件上传属性时,一直好奇图片上传的大小时如何计算的,最近在使用中认识到的计算方式:  首先,图片大小的存储基本单位是字节(byte).每个字节是由8个比特(bit)组成.所以,一个字节在十进制中 ...

  5. Java-Integer源码分析

    除了两种浮点型,剩下的几种基本数据类型的包装类几乎都实现了常量池,有好处用数据的时候直接去拿,没有再去创建,坏处是在程序编译的时候就存入大量数据不管用不用到.下面是一篇很好的文章,很详细,转自:htt ...

  6. Maven-10: 使用maven-help-plugin描述插件

    除了访问在线的插件文档之外,还可以借助maven-help-plugin来获取插件的详细信息.可以运行如下命令来获取maven-compiler-plugin2.1版本的信息: [INFO] Scan ...

  7. 【Python】 零碎知识积累 I

    大概也是出于初高中时学化学,积累各种反应和物质的习惯,还有大学学各种外语时一看见不认识的词就马上记下来的习惯,形成了一种能记一点是一点的零碎知识记录的癖好.这篇文章就是专门拿来记录这些零碎知识的,没事 ...

  8. JVM学习七:JVM之类加载器之类的卸载

    类加载的过程和原理,以及双亲委派机制都已经讲解完成,那么我们今天讲解类加载的最后一节,那么就是类的卸载. 我们知道,当一个类被加载.连接和初始化之后,他的生命周期就开始了,当该类的class对象不再被 ...

  9. C语言的字符串操作函数小结

    一.strcat()函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾.它返回一个指向字符串de ...

  10. Repository个人实践

    1.背景 最近,有空了,想着把之前一些乱七八糟的小项目给整理一下,尤其是涉及到Repository.UoW几处.为此,专门查阅了博客园中几个大神 关于Repository的实践,到最后都感觉依然莫衷一 ...