记一次向maven中央仓库提交依赖包

Posted 码上哈希

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记一次向maven中央仓库提交依赖包相关的知识,希望对你有一定的参考价值。

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 2019-01-06
uid       [ultimate] xxx <xxx@xxx.com>
sub   2048R/7A10AD69 2019-01-06

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

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

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

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

 

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

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

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

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

 

参考资料

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

GPG入门教程

以上是关于记一次向maven中央仓库提交依赖包的主要内容,如果未能解决你的问题,请参考以下文章

Maven的默认中央仓库

记 Maven 本地仓库埋坑之依赖包为何不能用

maven项目 模块化开发 引用的类修改了代码,jar包的引用问题

向maven中央仓库提交jar

解决IDEA中Maven加载依赖包慢的问题

Maven简介和安装(配置中央仓库和本地仓库,IDEA配置Maven)