1 注册maven(oss)账号
注册地址:
https://issues.sonatype.org/secure/Signup!default.jspa
注册成功后登陆到首页
2 创建一个Issue
Project: 项目类型,一般为Community Support。
Issue Type: 问题类型, 新的项目为New Project。
Summary:项目名称,如HASentinel。
Description:项目描述,介绍一下当前项目。
Group Id:对应pom.xml里的group id。如果你有个人或企业的域名,可以为公司的域名,审核时候需要验证当前域名为本人所有,如com.eeeffff.hasentinel,其中com.eeeffff须为域名eeeffff.com的拥有者,如果没有可以写github对应的个人地址(如:com.github.potenstop)
Project URL: 项目的地址,如
https://github.com/fenglibin/HASentinel 。
SCM url:项目对应的下载地址,如
https://github.com/fenglibin/HASentinel .git。
其他保持默认。填写完成后就可以create了。
3 域名拥有者验证
项目创建成功后,会有一个项目编辑,如下所示:
然后根据其要求,到域名提供商那里做一条TXT解析,这是最快的一种认证方式:
域名服务商增加该域名eeeffff.com的TXT解析:
记录值即为为该项目对应的项目代码值。
4 pgp生产秘钥key
我的电脑是linux Ubuntu18,Ubuntu本身包含了gpg这个命令,因而不需要额外的下载,如果是其它系统,可能需要下载相应的软件或命令。
生成加密key,使用命令“gpg --gen-key”:
查看生成的加密Key,使用命令“gpg --list-keys”:
将加密Key推送加远程加密服务器,此处我推到Ubuntu的加密服务器:
推送如果不报错,则说明推成功,如果推失败则多尝试几次,或者换一个远程加密服务器,加密服务器之间会相互同步数据。
查看推送的加密Key:
这步一定要验证一下,以确保推送真的成功了,如果获取失败则多尝试几次,我这边第一次操作就显示失败了。
5 配置settings.xml
在maven对应的config目录下的settings.xml中的services节点下增加一个service节点,配置你当前sonatype的用户名和密码,用于后续jar包远程推送到maven做权限验证,这里的id要和pom.xml中distributionManagement配置的id要一一对应,如我配置的为
<server>
<id>ossrh</id>
<username>maven_username</username>
<password>maven_password</password>
</server>
6 配置pom.xml
发布到maven仓库的项目,要求配置如下内容:
name: 项目名称。
description: 项目描述。
url: 项目地址
licenses: 开源协议。
developers: 开发者列表。
scm: 项目的git地址相关。
profiles: 配置不同的环境。比如开发环境 测试环境 发布环境。
groupId: 定义当前maven项目隶属的实际项目。
artifactId: 该元素定义实际项目中的一个Maven项目(模块).
version: 版本号, 带SNAPSHOT为快照版本,否则为 release 版本。
build: 插件。需要加上maven-source-plugin、maven-JAVAdoc-plugin、maven-gpg-plugin三个插件
dependencies: 依赖的模块。
pom.xml 配置参考如下截图及配置代码所示:
<!-- 配置必须的插件 -->
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>${maven.deploy.version}</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.0.1</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<!-- 配置项目发布的maven仓库路径 -->
<distributionManagement>
<repository>
<id>ossrh</id>
<name>Release</name>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
<snapshotRepository>
<id>ossrh</id>
<name>SNAPSHOTS</name>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
7 发布版本
都配置成功后,此时转到项目的根目录下,执行如下maven打包及发布命令:
mvn clean source:jar install deploy -Dmaven.test.skip
如果没有报错,则输出如下截图所示:
此时可以在创建项目的sonatype页面给负责和你对接的人留言,让他执行下一步操作,他会告诉你下一步该做什么:
8 在oss查看快照
发布快照版本,只需要在版本号后面加上SNAPSHOT字符串,重新打包即可,Maven会自动判断当前发布为快照版本,快照版本可以无限次发布,不需要在仓库中删除后再发布。
查看地址:
https://s01.oss.sonatype.org
可以根据GroupID搜索对应工程的快照的信息,查看快照是不需要登陆的,如下图所示。
9 发布和查看release版本
发布release版本只需要去掉版本号后面的的SNAPSHOT,重新执行deploy即可,但是请记住,此时deploy成功并不是真的发到了线上的Maven仓库,此时相当于发到了一个预发布仓库,此时需要用户去执行项目检查,包括javadoc生成是否符合规范、pom文件是否包含了scm地址等信息、是否通过gpg生成了校验asc文件等等,如果通不过会有相应的提示,完成这些修改后才能后关闭当前issue,执行真正的发布动作。
查看release版本需要登录才可以看到, 用户名和密码和注册maven一致。
执行项目检查的步骤:1)选中一个项目;2)执行上面的Close操作,然后项目会执行规范及安全检查,如果通过则release按钮会变得可用,如果检验没有通过,则会有相应的提示信息,需要根据提示修改,在执行下一次执行deploy之前,先通过Drop功能删除掉当前项目。
校验不通过大致信息如下所示:
此处展示了三种类型的错误:
签名校验错误;
pom文件校验错误;
Javadoc校验错误。
10 正式同步到Maven中央库
如果是第一次发布,需要在release成功后在之前的issue添加评论,告知该项目预计release成功。如下图:
待管理人员正式执行同步,等待一段时间,就可以在maven的正式仓库中执行到该项目了。
Maven仓库(https://search.maven.org/)中搜索项目: