如何推送个人项目至Maven中央仓库
1. 开篇
前段时间使用Gitee仓库搭建了一个Maven私有仓库,将一些开源包放到上面去,感觉使用起来还是不太方便,最近就折腾将这些包提交到Maven的中央仓库中。项目第一次提交Maven还是挺麻烦的,所以写个文章Mark一下。
2. 操作步骤
2.1. 提交申请
注册一个sonatype.org帐号,登陆并提交一个issue,没错,就是提交一个issue,具体可参考如下:
其中:
- 问题类型:一定要选
New Project
; - 概要:填项目名称;
- 描述:可不填;
- Group Id:填写你的项目ID,需注意的是这个Group Id对应的域名需要是你持有的,后续会验证这项;
- Project URL:就是项目主页地址;
- SCM url:就是Git仓库地址;
- username:填写你在sonatype JIRA的用户名,也可以填写别人的,这个用户名用于推送项目,所以要注意。
- Already Synced to Central:是指你是否准备好提交到中央仓库了,应该是给官方人员判断是否需要优先处理。
2.2. 配置项目
2.2.1. 配置settings.xml
在Maven的settings.xml
文件中增加<server>
配置,配置你sonatype的账号密码,参考如下:
<servers>
<server>
<id>sonatype-nexus-snapshots</id>
<username>demo</username>
<password>******</password>
</server>
<server>
<id>sonatype-nexus-staging</id>
<username>demo</username>
<password>******</password>
</server>
</servers>
2.2.2. 配置pom.xml
- 增加
license
、scm
、developer
信息。
<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>
<tag>master</tag>
<url>git@gitee.com:centy/xxl-job-spring-boot-starter.git</url>
<connection>scm:git:git@gitee.com:centy/xxl-job-spring-boot-starter.git</connection>
<developerConnection>scm:git:git@gitee.com:centy/xxl-job-spring-boot-starter.git</developerConnection>
</scm>
<developers>
<developer>
<name>centychen</name>
<email>292462859@qq.com</email>
</developer>
</developers>
- 增加release的
profile
配置,注意:distributionManagement.snapshotRepository
和distributionManagement.repository
的id需与settings.xml
中对应的server记录ID一致;distributionManagement的url根据官方反馈的url修改。
<profiles>
<profile>
<id>release</id>
<build>
<plugins>
<!-- Source -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.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>3.1.0</version>
<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.5</version>
<executions>
<execution>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<!--Compiler-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<fork>true</fork>
<verbose>true</verbose>
<encoding>UTF-8</encoding>
<showWarnings>false</showWarnings>
</configuration>
</plugin>
<!--Release-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.5.3</version>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>sonatype-nexus-snapshots</id>
<name>Sonatype Nexus Snapshots</name>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>sonatype-nexus-staging</id>
<name>Nexus Release Repository</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
</profile>
</profiles>
2.3. 安装及配置PGP
- Mac安装PGP,我是通过brew安装的,使用命令
brew install gpg
执行安装; - 使用命令
gpg --gen-key
生成公私钥,按照提示信息一步步操作,需要记住加密使用的Passphrase
,下面步骤需使用; - 上传公钥至公钥服务器,可通过
gpg --list-keys
查看公钥ID,通过一下命令上传:
gpg --send-keys [公钥ID] --keyserver hkp://keyserver.ubuntu.com:11371
2.4. 构建并部署
2.4.1. 构建SNAPSHOT版本
- 版本号修改为
***-SNAPSHOT
格式,如1.0.0-SNAPSHOT
。 - 执行以下命令开始构建:
mvn clean deploy -P release -Dmaven.test.skip=true
-
Deploy的时候会弹出一个输入
Passphrase
的页面,输入刚才生成pgp公私钥使用的密码。 -
构建完成后,在https://oss.sonatype.org/content/repositories/snapshots中应该可以找到刚刚提交的snapshot版本。
2.4.2. 构建RELEASE版本
- 版本号修改为
***-RELEASE
或者无后缀格式,如1.0.0-RELEASE
、1.0.0
。 - 构建并Deploy
mvn clean deploy -P release -Dmaven.test.skip=true
-
Deploy的时候会弹出一个输入
Passphrase
的页面,输入刚才生成pgp公私钥使用的密码。 -
登陆https://oss.sonatype.org/,点击左侧
Staging Repositories
,输入你的group id查找,可看到deploy记录: -
选中Deploy记录点击
Close
并Confirm
,刷新后会发现记录状态已经变成Closed
。 -
再选中记录点击
Release
并Confirm
完成发布,发布完成后需要等待中央仓库同步,我是等了1个多小时才能在中央仓库搜索出来。
3. 可能踩到的坑
3.1. gpg: signing failed: Inappropriate ioctl for device
使用mvn clean deploy
命令构建时,可能会报gpg: signing failed: Inappropriate ioctl for device
,是因为无法弹出Passphrase页面,需要在系统环境变量中增加export GPG_TTY=$(tty)
。
3.2. Access denied to staging repository
如果Deploy的时候报 Access denied to staging repository...
等错误,恭喜你,你的帐号权限有问题,需要再提一个issue处理该问题,可参考我提的issue。
3.3. 在Staging Repositories中执行Close操作不成功,状态依然是Open。
应该是执行close操作的数据校验有问题,比如pom.xml信息缺失等,我第一次提交的时候就没有在pom.xml中配置project name,校验就没有通过。留意页面下方Activity中的错误信息即可。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
JavaScript原型深入浅出
不学会怎么处理对象,你在 JavaScript 道路就就走不了多远。它们几乎是 JavaScript 编程语言每个方面的基础。事实上,学习如何创建对象可能是你刚开始学习的第一件事。 对象是键/值对。创建对象的最常用方法是使用花括号{},并使用点表示法向对象添加属性和方法。 let animal = {} animal.name = 'Leo' animal.energy = 10 animal.eat = function (amount) { console.log(`${this.name} is eating.`) this.energy += amount } animal.sleep = function (length) { console.log(`${this.name} is sleeping.`) this.energy += length } animal.play = function (length) { console.log(`${this.name} is playing.`) this.energy -= leng...
-
下一篇
借助混沌工程工具 ChaosBlade 构建高可用的分布式系统
在分布式架构环境下,服务间的依赖日益复杂,可能没有人能说清单个故障对整个系统的影响,构建一个高可用的分布式系统面临着很大挑战。在可控范围或环境下,使用 ChaosBlade 工具,对系统注入各种故障,持续提升分布式系统的容错和弹性能力,以构建高可用的分布式系统。 ChaosBlade 是什么? ChaosBlade是一款遵循混沌工程实验原理,建立在阿里巴巴近十年故障测试和演练实践基础上,并结合了集团各业务的最佳创意和实践,提供丰富故障场景实现,帮助分布式系统提升容错性和可恢复性的混沌工程工具。点击这里,了解详情。 ChaosBlade 无需编译,下载解压即可使用,支持基础资源、Java 应用、容器服务类的混沌实验,特点是操作简洁、无侵入、扩展性强。 ChaosBlade @GitHub,点击进入 下面我们以微服务分布式系统举例,一步一步构建高可用的分布式系统。 构建高可用的分布式系统 ChaosBlade 的使用方式 ChaoBlade 通过 CLI 方式调用,比如我们模拟 A 服务调用 B 提供的 com.alibaba.demo.HelloService 服务下的 hello 服务...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2整合Redis,开启缓存,提高访问速度
- 2048小游戏-低调大师作品
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音