Maven仍然是目前使用人数很多的、非常受欢迎的项目构建工具。其方便之处在于:我们只需在配置文件pom.xml
中引入依赖和插件,他就可以自动从中央仓库下载、配置并运行程序。不过假设我们自己写了一个jar外部包,想放到Maven中央仓库并使得别人和我们自己使用的时候更加方便,应该怎么做呢?
1,第一次注册账户 - 去Sonatype网站注册账户并申请工单
进入issues.sonatype.org,注册一个账户,然后点击“新建”按钮创建一个工单:
如下图,项目选择:Community Support - Open Source Project Repository Hosting (OSSRH)
问题类型选择:New Project
其余必填项如下图:
图中有*
的是必填项,其余留空或者保持默认即可,然后新建工单等待管理员审核。
项目地址可以随便填一个你的项目的Github仓库地址。这里还是强调一下组id的填写,组id需要根据你自己的域名或者开源仓库地址来填。
如果你是用域名,下面给出几个例子:
域名 | 组id |
---|---|
swsk33.top |
top.swsk33 |
swsk33-xxx.top |
top.swsk33-xxx |
开源仓库:
仓库地址 | 组id |
---|---|
gitee.com/swsk33 |
com.gitee.swsk33 |
github.com/swsk33 |
io.github.swsk33 |
后面在问题-我的报告中可以追踪issue的情况:
等待管理员审核。审核完成,管理员会在下面提示你让你验证这个域名是你的或者证明Gitee或者Github空间是你的,例如我的:
可以根据其回复的步骤进行。
上述由于我把组id填成了
com.github.xxx
而他要io.github.xxx
,所以他要我需要修改组id(update the Group ID field),如果第一次按照上述要求填对了就不用修改组id,直接按照其回复的步骤进行即可。
意思是让我在我的Github账户中新建一个公开仓库,其空间地址为:https://github.com/swsk33/OSSRH-81835
新建完成后,点击上面Respond
按钮开启工单,让管理员去验证。
等待验证完成,管理员就会接着回复你验证成功,这就说明你的工单通过了,可以上传项目了。
这个时候可以关闭问题了:
如果是用域名,则管理员会让你给你的域名添加一个TXT解析,然后他来验证:
给根域名添加TXT解析即可,内容如上图他说的(with the text后面那个OSSRH-xxx):
后续步骤和上述是一样的。
2,配置我们的项目
现在我们可以上传项目了。
先进入我们的Maven安装目录,编辑目录里面的conf
文件夹里面的settings.xml
文件,找到里面的<servers>
标签,添加如下内容:
<server>
<id>ossrh</id>
<username>你的sonatype用户名</username>
<password>你的sonatype密码</password>
</server>
这个配置是配置我们上述注册的Sonatype账户用户名和密码,使得我们的项目可以上传上去。
再配置我们要发布的项目的pom.xml
如下形式:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!-- 工件坐标,groupId必须和你申请时的一致 -->
<groupId>组id</groupId>
<artifactId>工件id</artifactId>
<version>版本</version>
<!-- 其余信息,自己填 -->
<packaging>jar</packaging>
<name>项目名</name>
<description>描述</description>
<url>项目地址</url>
<!-- 项目设定 -->
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- 许可证信息,这里是Apache 2.0的许可证,大家根据实际情况修改 -->
<licenses>
<license>
<name>The Apache Software License, Version2.0</name>
<url>https://www.apache.org/licenses/</url>
<distribution>repo</distribution>
</license>
</licenses>
<!-- 仓库信息,根据实际情况修改 -->
<scm>
<url>项目git仓库地址</url>
<connection>项目git克隆地址</connection>
<developerConnection>项目git仓库地址</developerConnection>
</scm>
<!-- 开发者信息,根据实际情况修改 -->
<developers>
<developer>
<name>开发者名</name>
<email>邮箱</email>
<url>开发者主页</url>
</developer>
</developers>
<!-- 中央仓库地址配置,不需要修改 -->
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<build>
<!-- 下列插件是发布到中央仓库所需要的,已配置好无需修改 -->
<plugins>
<!-- 源码生成插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>attach-sources</id>
<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.5.0</version>
<configuration>
<show>private</show>
<nohelp>true</nohelp>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- GPG签名插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
简单的说一下这个配置文件:
<groupId>
必须就是我们刚刚工单申请的groupId
,包名自己取<version>
是应用版本,注意版本里面不要带有-SNAPSHOT
字样,否则上传后可能无法在仓库找到并发布<url>
,<name>
和<description>
是项目网址、名称和描述,这三者都是必须要的,缺一不可,否则上传项目是无法通过校验的<licenses>
,<developers>
和<scm>
这个也是必须的,根据自己的实际情况填写<distributionManagement>
中要设置snapshot仓库(<snapshotRepository>
)和release仓库(<repository>
)地址,如上填写,需要注意的是两个仓库配置中的<id>
必须和我们前面设置的settings.xml
中的<servers>
中的<id>
对应一致,否则无法上传<build>
部分是发布项目必要的一些组件,已经在上面的配置文件中配置好了,不用改变了,作用见上面的注释
上面给出的示例,大家可以全部复制作为一个模板去使用,自己进行修改其中的内容。
3,生成秘钥并上传工程
在上传项目时,我们必须先生成秘钥才能上传。
安装git,右键打开git bash输入生成秘钥命令:
gpg --gen-key
然后会提示要你输入姓名和邮箱地址:
输入完成,会弹出个窗口让你设置这个秘钥的密码并确认:
自己设定一个密码并牢记,因为后面要用到这个密码的。
然后输入命令查询已经生成的秘钥:
gpg --list-keys
在pub
字段下面有一个十六进制数,那就是这个秘钥的ID。
然后我们要把这个秘钥上传至公钥服务器,使用如下命令:
gpg --keyserver keyserver.ubuntu.com --send-keys 秘钥ID
秘钥ID就是我们刚刚gpg --list-keys
命令查到的自己的秘钥的ID,复制过去即可。
然后验证是否成功地上传到了服务器:
gpg --keyserver keyserver.ubuntu.com --recv-keys 秘钥ID
如果两条命令执行输出结果都如下说明成功:
这样,就完成了秘钥的配置了。
接下来,在我们的项目文件夹下打开Git Bash或者其它终端,输入上传项目命令:
mvn clean deploy
执行过程中会弹出一个窗口要求输入秘钥密码,就是输入我们先开始生成秘钥时设置的秘钥密码。
等待上传,最后显示绿色的Build Success
说明上传成功。
4,去仓库发布项目到Maven中央仓库
上面的步骤只是把项目传到了Sonatype上了,还没有发布出去。
进入s01.oss.sonatype.org,登录,点击旁边的Staging Repositories
即可看到我们发布的项目。
勾选项目,点击close
按钮,开始进行项目校验。
我这里已经点过了,所以是灰色的。
再点击下面的active
标签可以查看close
的进度:
显示All rules passed: Central Sync Requirement
就说明校验通过,可以发布了。
再点击上面的release
按钮即可发布到中央仓库了。
完成后,大约过个2个小时,你就可以在central.sonatype.com搜索到你的发布的项目了!
5,以后再发布的时候
以后发布项目,如果groupId
不变的话,我们就不需要再去申请工单了。直接重复上述的2、3、4部分中的部分关键步骤即可。
上述settings.xml
已经配置了servers
,就不用再次配置了,即第2部分配置settings.xml
可以省略了。秘钥也已经生成过了,也不需要再次生成了, 即第3部分的秘钥生成也不需要了。不过如果更换了电脑,那就要重新配置settings.xml
并重新生成并上传秘钥了。
参考文档: