发布自己的jar包到Maven中央仓库

        Maven仍然是目前使用人数很多的、非常受欢迎的项目构建工具。其方便之处在于:我们只需在配置文件pom.xml中引入依赖和插件,他就可以自动从中央仓库下载、配置并运行程序。不过假设我们自己写了一个jar外部包,想放到maven中央仓库并使得别人和我们自己使用的时候更加方便,应该怎么做呢?

一,去sonatype网站注册账户并申请工单

        进入issues.sonatype.org,注册一个账户,然后点击“新建”按钮创建一个工单:

如下图,项目选择:Community Support - Open Source Project Repository Hosting (OSSRH)

问题类型选择:New Project

其余如下图:

 

等待管理员审核。审核完成,管理员会在下面提示你让你验证这个域名是你的或者证明gitee或者github空间是你的,例如我的:

 意思是让我在我的gitee账户中新建一个公开仓库,其空间地址为:

https://gitee.com/swsk33/OSSRH-60021

新建完成后,点击下方的“备注”按钮回复管理员告诉他我已经新建仓库。

验证完成,管理员就会接着回复你一些地址,这就说明你的工单通过了,可以上传项目了。

 二,配置我们的项目

 现在我们可以上传项目了。

先进入我们的maven安装目录,编辑目录里面的conf文件夹里面的settings.xml文件,找到里面的<servers>标签,添加如下内容:

<server>
    <id>自定义一个snapshot服务器id</id>
    <username>你刚刚注册的sonatype用户名</username>
    <password>你刚刚注册的sonatype用户密码</password>
</server>

<server>
    <id>自定义一个release服务器id</id>
    <username>你刚刚注册的sonatype用户名</username>
    <password>你刚刚注册的sonatype用户密码</password>
</server>

 这个配置是配置我们sonatype服务器的账户,使得我们的项目可以上传上去,这里举个例子:

<server>
    <id>snapshot</id>
    <username>user</username>
    <password>123456</password>
</server>

<server>
    <id>release</id>
    <username>user</username>
    <password>123456</password>
</server>

再配置我们的项目的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>
	<artifactId>包名</artifactId>
	<version>版本</version>
	<name>应用名称</name>
	<description>描述</description>
	<url>应用网址</url>
	<!--打包方式-->
	<packaging>jar</packaging>
	
	<!--maven工程配置-->
	<properties>
		<java.version>1.8</java.version>
		<maven.compiler.source>${java.version}</maven.compiler.source>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<maven.compiler.target>${java.version}</maven.compiler.target>
	</properties>

	<!--许可证信息,根据自己的情况修改-->
	<licenses>
		<license>
			<name>The Apache Software License, Version2.0</name>
			<url>http://www.apache.org/licenses/</url>
			<distribution>repo</distribution>
		</license>
	</licenses>

	<!--托管仓库信息,根据自己的应用情况修改-->
	<scm>
		<url>项目地址</url>
		<connection>项目git地址</connection>
		<developerConnection>项目地址</developerConnection>
	</scm>

	<!--开发者信息-->
	<developers>
		<developer>
			<name>姓名</name>
			<email>邮箱</email>
			<url>主页</url>
		</developer>
	</developers>

	<!--仓库地址配置信息-->
	<distributionManagement>
		<snapshotRepository>
			<!--id 要与setting.xml server id一致 -->
			<id>snapshot</id>
			<url>https://oss.sonatype.org/content/repositories/snapshots</url>
		</snapshotRepository>
		<repository>
			<!--id 要与setting.xml server id一致 -->
			<id>release</id>
			<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
		</repository>
	</distributionManagement>
	
	<!--发布到oss.sonatype.org需要的组件,已经配置好,无需修改-->
	<build>
		<plugins>
			<!--java source生成插件-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<version>2.2.1</version>
				<executions>
					<execution>
						<id>attach-sources</id>
						<goals>
							<goal>jar-no-fork</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			
			<!--java doc生成插件-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
				<version>2.9.1</version>
				<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>1.5</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>部分是发布项目必要的一些组件,已经在上面的配置文件中配置好了,不用改变了,作用见上面的注释。

上面给出的示例,大家可以全部复制作为一个模板去使用,自己进行修改。 

三,生成秘钥并上传工程

在上传项目时,我们必须先生成秘钥才能上传。

安装git,右键打开git bash输入生成秘钥命令:

gpg --gen-key

 然后会提示要你输入姓名和邮箱地址:

输入完成,会弹出个窗口让你设置这个秘钥的密码并确认:

自己设定一个密码并牢记,因为后面要用到这个密码的。

 然后输入命令查询已经生成的秘钥:

gpg --list-keys

 在pub字段下面有一个十六进制数,那就是这个秘钥的id。

然后我们要把这个秘钥上传至公钥服务器,需要上传到两个服务器,使用如下命令:

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 秘钥ID
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 秘钥ID

 秘钥ID就是我们刚刚gpg --list-keys命令查到的自己的秘钥的ID,复制过去即可。

然后验证是否成功地上传到了两个服务器:

gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 秘钥ID
gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 秘钥ID

如果两条命令执行输出结果都如下说明成功:

 这样,就完成了秘钥的配置了。

需要说明的是,上述第一个公钥地址可能会出现上传不成功的情况(pool.sks-keyservers.net),即上传后再使用--recv-keys发现无数据。这时可以重复上传或者将上述地址改为下列镜像站:

hkp://ha.pool.sks-keyservers.net
hkp://p80.pool.sks-keyservers.net:80

将上述命令中的地址部分替换即可。 

接下来,在我们的项目文件夹下打开git bash,输入上传项目命令:

mvn clean deploy

执行过程中会弹出一个窗口要求输入秘钥密码,就是输入我们先开始生成秘钥时设置的秘钥密码。

等待上传,最后显示绿色的Build Success说明上传成功。

四,去仓库发布项目到Maven中央仓库

 上面的步骤只是把项目传到了sonatype上了,还没有发布出去。

进入oss.sonatype.org,登录,点击旁边的Staging Repositories即可看到我们发布的项目。

 勾选项目,点击close,开始进行项目校验。

我这里已经点过了,所以是灰色的。

再点击下面的active标签可以查看close的进度:

 显示All rules passed: Central Sync Requirement就说明校验通过,可以发布了。

再点击上面的release按钮即可发布到中央仓库了。

完成后,大约过个2个小时,你就可以在search.maven.org找到你的发布的项目了!

五,以后再发布的时候

以后发布项目,如果groupId不变的话,我们就不需要再去申请工单了。直接重复上述的二、三、四步中的部分关键步骤即可,其中,settings.xml已经配置了servers,就不用再次配置了,即第二步配置settings.xml可以省略了。秘钥也已经生成过了,也不需要再次生成了, 即第三步的秘钥生成也不需要了。不过如果更换了电脑,那就要重新配置settings.xml并重新生成并上传秘钥了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

「已注销」

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值