要将带有已编译 Java 类的 JAR 文件发布到 Maven 中央仓库,您需要完成一系列步骤。本教程包含一个清单,其中列出了您需要采取哪些步骤才能将 Java 项目或产品发布到中央 Maven 仓库,以及关于您需要做什么的评论以及相关链接。
将 JAR 文件发布到中央 Maven 仓库后,所有使用 Maven 构建 Java 项目的开发者都可以很容易地使用该 JAR 文件。因此,中央 Maven 仓库是开源项目分发其代码 JAR 文件的便捷方式。它也是共享其他类型公共代码的便捷方式,例如 SAAS 或云平台的 API。客户端可能不是开源的,但它的用户仍然可以轻松免费地使用这些API。
本教程不是发布到 Maven 中央仓库的完全详尽的手册,它只是一个让你可以启动这项工作的很好的着手点。官方手册可以在这里找到: Producers Guide to Publishing to Central Maven Repository。然而,官方手册很容易“迷失” - 这意味着您很容易失去对整体方向的把控,而陷入具体细节。希望本教程中的清单将帮助您把握方向并继续前进。
发布到中央 Maven 仓库的步骤
要将 JAR 文件发布到中央 Maven 存储库,您必须执行 以下3 组步骤。接下来将介绍每组步骤。
创建一个 Sonatype 帐户并声明您的域名
在您或您的组织可以将任何内容发布到中央 Maven 仓库之前,您需要完成以下步骤:
- 在 Sonatype 创建帐户
- 声明产品的域名
这些步骤是您需要完成的一次性设置过程。这个账号和域名只在首次发布jar文件到中央仓库需要,后续升级jar文件版本将不需要再次设置。
创建和发布 PGP 密钥
所有发布到中央 Maven 仓库的 JAR 文件都必须使用 PGP 私钥进行数字签名。为此,您必须创建自己的 PGP 私钥/公钥对并将公钥发布到公钥服务器。您必须为自己保留私钥。您需要它来签署所有要发布到中央 Maven 仓库的 JAR 文件。公钥用于验证用户从中央 Maven 存储库下载 JAR 文件的签名。创建 PGP 密钥对并发布它需要以下步骤:
- 创建一个 PGP 私钥/公钥对来签署您的 JAR 文件
- 将您的密钥发布到公钥服务器
PGP 私钥最终会过期。您不需要“扩展”私钥。您可以创建一个新的并在旧的过期时发布到公钥服务器。然后使用这个新的密钥对对新版本进行签名。
您可以从 Sonatype 生产者页面找到有关创建和发布公钥/私有密钥对的更多信息:https ://central.sonatype.org/pages/producers.html 。让它在 Windows 上工作可能有点挑战性,因为 Windows PGP 显示的输出和行为与官方文档中显示的示例略有不同。但是继续在网上搜索,你最终会成功的。因为我也做到了。
准备你的项目 Maven POM 文件
对于您想要将 JAR 文件发布到中央 Maven 仓库的每个 Java 项目,您需要配置项目 POM 文件部分属性如下:
- 项目坐标
- 项目名称
- 项目描述
- 项目 URL
- 项目许可证
- 项目开发人员
- 项目发布管理
配置项目 POM 插件:
- maven-release-plugin
- nexus-staging-maven-plugin
- maven-source-plugin
- maven-javadoc-plugin
- maven-gpg-plugin
如需完整的 POM 文件,请查看此 github 存储库中的 pom.xml:https://github.com/fastjrun/sdkg/blob/master/pom.xml
配置Maven settings.xml 文件的步骤:
- 配置 Sonatype 账户登录
- 配置用于签署 JAR 文件的 PGP 密钥
具体配置
下面将介绍一些具体配置信息,供您参考
- 项目发布管理
<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>
- 配置maven-release-plugin(版本号:1.6.7)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<localCheckout>true</localCheckout>
<pushChanges>false</pushChanges>
<mavenExecutorId>forked-path</mavenExecutorId>
<!--suppress UnresolvedMavenProperty -->
<arguments>-Dgpg.passphrase=${gpg.passphrase}</arguments>
</configuration>
<dependencies>
<dependency>
<groupId>org.apache.maven.scm</groupId>
<artifactId>maven-scm-provider-gitexe</artifactId>
<version>${maven-scm-provider-gitexe.version}</version>
</dependency>
</dependencies>
</plugin>
- 配置nexus-staging-maven-plugin(版本号:1.6.7)
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<serverId>sonatype-nexus-staging</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
- 配置maven-source-plugin(版本号:3.0.1)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
- 配置maven-javadoc-plugin(版本号:3.0.1)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
- 配置maven-gpg-plugin(版本号:3.0.1)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
- 配置 settings.xml
<settings>
<servers>
<server>
<id>sonatype-nexus-staging</id>
<username>username</username>
<password>password</password>
</server>
<server>
<id>sonatype-nexus-snapshots</id>
<username>username</username>
<password>password</password>
</server>
</servers>
<profiles>
<profile>
<id>nexus</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.keyname>B454AF09835D3A68DBB0F74C150D5AA27F1677DE</gpg.keyname>
<gpg.passphrase>passphrase</gpg.passphrase>
</properties>
</profile>
</profiles>
</settings>
发布 JAR 文件
完成上述所有步骤后,您就可以发布 JAR 文件了。您可以通过以下 Maven 命令执行此操作:
mvn clean deploy
在执行此命令期间,可能会要求您输入 PGP 私钥的密码。至少,在运行它时(在 Windows 上)我被要求这样做。然后我只需输入我的密码并回车,Maven 将继续发布和发布过程。
声明:
本文主要部分翻译自http://tutorials.jenkov.com/maven/publish-to-central-maven-repository.html ,里面引入pom实例和pom中的配置做了变更和升级。
评论区