Maven 教程之发布 jar 到私服或中央仓库
📓 本文已归档到:「blog」
发布 jar 包到中央仓库
为了避免重复造轮子,相信每个 Java 程序员都想打造自己的脚手架或工具包(自己定制的往往才是最适合自己的)。那么如何将自己的脚手架发布到中央仓库呢?下面我们将一步步来实现。
在 Sonatype 创建 Issue
(1)注册 Sonatype 账号
发布 Java 包到 Maven 中央仓库,首先需要在 Sonatype 网站创建一个工单(Issues)。
第一次使用这个网站的时候需要注册自己的帐号(这个帐号和密码需要记住,后面会用到)。
(2)创建 Issue
注册账号成功后,根据你 Java 包的功能分别写上Summary、Description、Group Id、SCM url以及Project URL等必要信息,可以参见我之前创建的 Issue:OSSRH-36187。

创建完之后需要等待 Sonatype 的工作人员审核处理,审核时间还是很快的,我的审核差不多等待了两小时。当 Issue 的 Status 变为RESOLVED后,就可以进行下一步操作了。
说明:如果你的 Group Id 填写的是自己的网站(我的就是这种情况),Sonatype 的工作人员会询问你那个 Group Id 是不是你的域名,你只需要在上面回答是就行,然后就会通过审核。
使用 GPG 生成公私钥对
(1)安装 Gpg4win
Windows 系统,可以下载 Gpg4win 软件来生成密钥对。
安装后,执行命令 gpg --version 检查是否安装成功。
(2)生成密钥对
执行命令 gpg --gen-key
说明:按照提示,依次输入用户名、邮箱。
(3)查看公钥
说明:其中,E4CE537A3803D49C35332221A306519BAFF57F60 就是公钥
(4)将公钥发布到 PGP 密钥服务器
执行 gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 发布公钥:
🔔 注意:有可能出现 gpg: keyserver receive failed: No dat 错误,等大约 30 分钟后再执行就不会报错了。
(5)查看公钥是否发布成功
执行 gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 查看公钥是否发布成功。
Maven 配置
完成了前两个章节的准备工作,就可以将 jar 包上传到中央仓库了。当然了,我们还要对 maven 做一些配置。
settings.xml 配置
一份完整的 settings.xml 配置示例如下:
pom.xml 配置
(1)添加 licenses、scm、developers 配置:
(2)添加 distributionManagement 配置
说明:
<snapshotRepository>指定的是 snapshot 仓库地址;<repository>指定的是 staging (正式版)仓库地址。需要留意的是,这里的 id 需要和 settings.xml 中的<server>的 id 保持一致。
(3)添加 profiles 配置
部署和发布
按照上面的步骤配置完后,一切都已经 OK。
此时,使用 mvn clean deploy -P sonatype 命令就可以发布 jar 包到中央仓库了:
说明:-P 参数后面的 sonatype 需要和 pom.xml 中
<profile>的 id 保持一致,才能激活 profile。
部署 maven 私服
工作中,Java 程序员开发的商用 Java 项目,一般不想发布到中央仓库,使得人人尽知。这时,我们就需要搭建私服,将 maven 服务器部署在公司内部网络,从而避免 jar 包流传出去。怎么做呢,让我们来一步步学习吧。
下载安装 Nexus
进入官方下载地址,选择合适版本下载。

本人希望将 Nexus 部署在 Linux 机器,所以选用的是 Unix 版本。
这里,如果想通过命令方式直接下载(比如用脚本安装),可以在官方历史发布版本页面中找到合适版本,然后执行以下命令:
解压后,有两个目录:
nexus-3.13.0-01 - 包含了 Nexus 运行所需要的文件。是 Nexus 运行必须的。
sonatype-work - 包含了 Nexus 生成的配置文件、日志文件、仓库文件等。当我们需要备份 Nexus 的时候默认备份此目录即可。
启动停止 Nexus
进入 nexus-3.13.0-01/bin 目录,有一个可执行脚本 nexus。
执行 ./nexus,可以查看允许执行的参数,如下所示,含义可谓一目了然:
启动 nexus -
./nexus start停止 nexus -
启动成功后,在浏览器中访问 http://<ip>:8081,欢迎页面如下图所示:

点击右上角 Sign in 登录,默认用户名/密码为:admin/admin123。
有必要提一下的是,在 Nexus 的 Repositories 管理页面,展示了可用的 maven 仓库,如下图所示:

说明:
maven-central - maven 中央库(如果没有配置 mirror,默认就从这里下载 jar 包),从 https://repo1.maven.org/maven2/ 获取资源
maven-releases - 存储私有仓库的发行版 jar 包
maven-snapshots - 存储私有仓库的快照版(调试版本) jar 包
maven-public - 私有仓库的公共空间,把上面三个仓库组合在一起对外提供服务,在本地 maven 基础配置 settings.xml 中使用。
使用 Nexus
如果要使用 Nexus,还必须在 settings.xml 和 pom.xml 中配置认证信息。
配置 settings.xml
一份完整的 settings.xml:
配置 pom.xml
在 pom.xml 中添加如下配置:
🔔 注意:
<repository>和<snapshotRepository>的 id 必须和settings.xml配置文件中的<server>标签中的 id 匹配。
<url>标签的地址需要和 maven 私服的地址匹配。
执行 maven 构建
如果要使用 settings.xml 中的私服配置,必须通过指定 -P zp 来激活 profile。
示例:
参考资料
Last updated
Was this helpful?