侧边栏壁纸
博主头像
fastjrun博主等级

前大厂工程师,长期从事 Java 开发,架构设计,容器化等相关工作,精通java,熟练使用maven、jenkins等devops相关工具链,擅长容器化方案规划、设计和落地。

  • 累计撰写 70 篇文章
  • 累计创建 47 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

将 JAR 发布到中央 Maven 仓库

fastjrun
2022-02-03 / 0 评论 / 0 点赞 / 462 阅读 / 5,088 字 / 正在检测是否收录...

要将带有已编译 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中的配置做了变更和升级。

0

评论区