一步一步将项目推送到maven中央仓库

原文:https://gitee.com/wl4g/xcloud-blogs/blob/master/articles/deploy-maven-central/README_CN.md

一步一步将项目推送到maven中央仓库

最近工作比较空闲,做了一些实用小工具,在本地直接引用jar包实在是不方便,所以研究了一下如何将项目推送到maven中央仓库。怕日后遗忘,所以写这篇文章记录一下,也方便朋友们借鉴。

一、将代码上传到托管平台

这一步不必多说,想必大家都知道,git,码云,bitbucket都可以。

二、使用sonatype创建工单

非首次推送可忽略,同一groupId只有第一次较繁琐需提交工单,第二次之后推送无需再生成gpg秘钥了,直接到 第四步

进入sonatype网站:https://issues.sonatype.org创建账号。

完成之后可以在页面顶部看到如下画面
[图片上传失败...(image-2c249f-1609900373388)]

项目选择:Community Support - Open Source Project Repository Hosting (OSSRH)

问题类型选择:New Project

概要:对要发布的项目作一个简单的描述。

描述选填可以不写。

group id:即将要发布的maven项目的group id。

Project Url:是项目所在地址。

SCM URL:clone项目的地址。

username(s):就是你在该网站注册的用户名。

Already Synced to Centra:是否准备好同步到中央仓库,选择yes的话则会覆盖之前的构建。

填写完成后点击新建,然后等待审核。

如果你使用的是自己的域名,管理员会回复如下信息:
[图片上传失败...(image-901657-1609900373389)]

大意就是要使用他们提供的两种方式确认一下这个域名是属于你的。如果这个域名不是你拥有的,那么可以使用他们提供的域名作为group id。

我才用的是他们提供的第一种方法,就是在域名解析添加一条解析,记录类型为TXT,主机记录设为空,记录值是JIRA ticket。

然后回复他们:Yes, this domain is mine. 就ok了(英语不好,不会写太多,简单粗暴就行)。

很快他们就会回复审核通过。
[图片上传失败...(image-568dc3-1609900373389)]

三、安装GPG

GPG下载地址:https://www.gnupg.org/download/index.html

我是Mac,所以下载的GnuPG for OS X,下载下来安装,安装完成之后打开terminal

输入:gpg2 --version 可以查看GPG版本
[图片上传失败...(image-ed423-1609900373389)]

输入:gpg2 --gen-key 创建密钥对。根据提示输入姓名和邮箱地址,这两个其实不重要,重要的是一定要记住Passphase,相当于你的密码。生成成功之后会显示你的公钥信息。如果没有找到也没事,可以通过输入: gpg2 --list-keys 来查询。

找到生成好的公钥后,输入:

gpg2 --keyserver hkp://pool.sks-keyservers.net:11371 --send-keys [你的公钥]   # 可填完整pubKey,但需注意实际上只上传了后缀一部分

把公钥上传到服务器。

参考推送gpg密钥sonatype文档

检查是否上传成功:

gpg2 --keyserver hkp://pool.sks-keyservers.net --recv-keys [你的公钥]   # 可填完整pubKey,但需注意实际上只上传了后缀一部分

特别注意:此步骤非常重要,否则最后mvn deploy的时会校验不通过,亲测在mvn推送时可能会遇到总是No public key错误,可能是密钥服务器延迟的问题,目前也没有好办法,gpg2 --list-key查看生成的密钥找到库文件路径删掉,然后重新生成多试几次。

在web上验证是否成功上传gpg密钥到验证服务:</br>
http://pool.sks-keyservers.net
[图片上传失败...(image-fb0553-1609900373389)]

提示一下这里也有一个小坑需注意,搜索条件不能直接粘贴gpg生成的pubkey,需要以十六进制  0x  开头加上 pubkey的后16位字符,例如:

0x758F0F53778F6xxx

[图片上传失败...(image-24cb2b-1609900373389)]

或在这里查:http://pool.sks-keyservers.net

[图片上传失败...(image-bfc314-1609900373389)]

查询结果:

[图片上传失败...(image-c54e29-1609900373389)]

注:这里一定要能查到,后面才能deploy,否则会验证不成功。如果一次上传不行就多试几次,貌似我也是测试了几次才行,还有就是注意上传的地址协议开头 "hkp://""hkps://" 还是 "http://""https://"的区别,不行就更换尝试,如果网络连不上就换一个地址试试,如:keyserver.ubuntu.com,万恶的中华局域网w(゚Д゚)w

提示:Sonatype公司会用到三个key-servers,校验时会任意查其中一个,地址分别为:
http://pgp.mit.edu:11371</br>
http://keyserver.ubuntu.com:11371</br>
http://pool.sks-keyservers.net:11371</br>

三、配置Maven

修改maven全局配置文件setting.xml,找到<servers></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>

将用户名和密码改成之前注册的sonatype的用户名密码就好了。

由于我安装的是GPG2所以要需要在下面修改一个地方,找到<profiles></profiles>,添加:

    <profile>
        <id>gpg</id>
        <properties>
            <gpg.executable>gpg2</gpg.executable>
            <gpg.passphrase>mypassphrase</gpg.passphrase>
        </properties>
    </profile>

找到<activeProfiles></activeProfiles>,添加:

    <activeProfile>gpg</activeProfile>

完成后保存退出。

在待上传的项目中的pom.xml中添加:

    <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>开发者名</name>
            <email>开发者邮箱</email>
        </developer>
    </developers>
    <scm>
        <connection>scm:项目的ssh地址</connection>
        <developerConnection>scm:项目的ssh地址</developerConnection>
        <url>项目地址</url>
    </scm>
    <profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <!-- Source -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <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>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar</goal>
                                </goals>
                            </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>
            <distributionManagement>
                <snapshotRepository>
                    <id>sonatype-nexus-snapshots</id>
                    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
                </snapshotRepository>
                <repository>
                    <id>sonatype-nexus-staging</id>
                    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                </repository>
            </distributionManagement>
        </profile>
    </profiles>

将上面配置中的汉字内容替换为对应的信息就完成了。

四、推送到Maven中央仓库

大功告成,可以通过deploy推送了使用下面代码推送到maven中央仓库:

mvn clean deploy -P release

看到显示BUILD SUCCESS后就可以愉快的到中央仓库(https://oss.sonatype.org,使用sonatype账号登陆 -> 左边点击 Staging Repositories),找发布的项目了。

当然前提是sonatype中创建的工单要审核通过,如果审核还没有通过是发布不了的,项目会在Staging Repositories菜单里。等审核通过后你需要选择你的项目,然后先点击close,顺利close之后(也就是在activity标签中没有报错信息,并且项目对应的status变为closed),再点一下release,等待release结束之后就完成了。

五、最后别忘了通知管理员关闭工单

在之前的工单下面添加一条备注,我写的:This Component has been successfully released, thank you.(也不知道有没有语病)。等管理员审核通过关闭了这个工单就算彻底完成了。

是不是很麻烦?没关系,只有第一次会这么麻烦,今后只要group id没有发生变化就可以直接推送,不需要在做这些繁琐的工作了。

附maven仓库搜索地址:https://search.maven.org/,以上工序都完成后可以在这个地址搜到自己推送的组件。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270