上传jar包到maven中央仓库(闭坑指南)

如果这篇文章对您有些用处,请点赞告诉我O(∩_∩)O

目录

预备知识

一、sonatype.org添加项目

二、发布snapshots版本

三、发布release版本


解决问题:

自己开发了开源的项目,想上传到maven中央仓库,这样方便的大家在外网使用以及升级。

预备知识

(1)maven中央仓库(Maven Central),由sonatype.org维护。

snapshots版本不需要Staging审核,在https://oss.sonatype.org可以查到。

release版本需要通过Staging审核,最终才可以在https://repo1.maven.org/maven2/查到。

(2)gpg签名

gpg是加密工具,如果要发布自己的jar到中央仓库Release Repositories ,则需要gpg签名,证明此包的完整性。

加密解密是防止内容泄漏,签名验签是防止内容被串改(确保完整性)。

这里只使用rsa签名验签功能。

(3)release版本和snapshots版本区别

snapshots版本:快照版本即开发版本,版本号以-SNAPSHOT结尾,开发人员同一个版本多次发布,使用者可以自动load最新版本。

release版本:发布版本即稳定版本,开发人员同一个版本多次发布,使用者不能自动load最新版本。

如:release版本1.0.0发现有bug,则需要改为1.0.1-SNAPSHOT修复代码。

一、sonatype.org添加项目

1、sonatype.org上创建注册账号

https://issues.sonatype.org/secure/Dashboard.jspa

2、创建issue

0

0

项目:Community Support - Open Source Project Repository Hosting (OSSRH)

问题类型:New Project

摘要:简单介绍自己的项目

GroupId:对应github或者gitee上个人域倒置,如:com.gitee.flyzing

ProjectUrl:对应github或gitee上仓库地址,如:https://gitee.com/flyzing/mybatis-genl

SCM url:对应github或gitee上仓库地址+.git,如:https://gitee.com/flyzing/mybatis-genl.git

其他选项不填。

3、sonatype人工审核

0

初始状态为Open,如果通过审核为状态改为Resolved(已解决),

如果审核不通过,状态变为Waiting for Response,审核人员会给出“评论”。

坑1、添加issue时,填入的groupid,必须是一个可访问且属于自己的域名。

0

于是,将groupid改为自己的gitee或github地址,如:com.gitee.flyzing

坑2,添加issue时,填入的groupid,必须是一个可访问且属于自己的域名,要求你在域中添加OSSRH-xxxxx证明。

0

于是,在仓库中添加OSSRH-xxxxx空仓库,链接可访问即可。

0

通过审核,会收到评论和邮件。

0

二、发布snapshots版本

1、项目pom.xml添加配置

<!--开发者的信息-->
	<developers>
		<developer>
			<name>flyzing</name>
			<email>flyzing@126.com</email>
		</developer>
	</developers>
	<!--项目的版本管理地址-->
	<scm>
		<url>https://gitee.com/flyzing/mybatis-genl</url>
	</scm>
	<!--发布的地址-->
	<distributionManagement>
        <snapshotRepository>
            <id>snapshots</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
        <repository>
        	<id>release</id>
            <url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
        </repository>
    </distributionManagement>

其中url对应sonatype.org人工审核通过后评论或邮件中提供的snapshots和release地址。

其中id对应maven中的setting.xml中配置。

2、maven setting.xml添加配置

<servers>
    <server>
   	 <id>snapshots</id>
   	 <username>sonatype.org用户名</username>
   	 <password>sonatype.org密码</password>
 	</server>
 	<server>
   	 <id>release</id>
     <username>sonatype.org用户名</username>
     <password>sonatype.org密码</password>
 	</server>
</servers>

坑3,这里配置的setting.xml是指home中.m2目录的文件,如:vim ~/.m2/settings.xml

如果配置的是maven项目中的setting.xml,如:vim ~/DEV/apache-maven-3.5.0/conf/settings.xml,那么在deploy时将读取不到配置。

报错Return code is: 401, ReasonPhrase: Unauthorized的两个原因,即是server中username和password错误 或 根本读取不到配置。

因此可以先配置好后复制到.m2中,同时使用mvn help:effective-settings查看生效的setting.xml内容。  

3、命令行发布

mvn clean deploy

可以在https://oss.sonatype.org/查看发布结果。

三、发布release版本

release版本发布比snapshots版本发布多了Staging环节。

0

因此需要在Snapshots配置基础上,添加额外配置通过审核,具体如下:

1、pom.xml添加审核时必要的项目信息

    <modelVersion>4.0.0</modelVersion>
	<groupId>com.gitee.flyzing</groupId>
	<artifactId>mybatis-genl</artifactId>
	<version>1.0.0</version>
	<packaging>jar</packaging>
	<!-- 如果name、url、description、licenses为空,release到中央库报错 -->
	<name>mybatis-genl</name>
    <url>https://gitee.com/flyzing/mybatis-genl</url>
    <description>mybatis-genl</description>
    <licenses>
        <license>
            <name>The Apache Software License, Version 2.0</name>
            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        </license>
    </licenses>

坑4、groupId必须和在sonatype.org申请的相对应,不一致deploy时报错:ReasonPhrase: Forbidden。

我之前在sonatype.org申请过com.flyzing失败,后改为com.flyzing.gitee申请通过,然而pom.xml里忘记改了,所以这里报错。

坑5、其中name、url、description、licenses不能为空,发布release版本时最终审核需要。

2、生成gpg签名

(1)下载并安装gpg

brew install gpg

坑6、brew不可用

==> `brew cleanup` has not been run in 30 days, running now...

Error: Permission denied ......

修改权限,重新安装

sudo chown -R $(whoami):admin /usr/local/* && sudo chmod -R g+rwx /usr/local/* 
brew reinstall gpg

(2)生成gpg key

gpg --full-generate-key

请选择您要使用的密钥类型:
   (1) RSA 和 RSA (默认)
   (2) DSA 和 Elgamal
   (3) DSA(仅用于签名)
   (4) RSA(仅用于签名)
  (14) Existing key from card
您的选择是? 4
RSA 密钥的长度应在 1024 位与 4096 位之间。
您想要使用的密钥长度?(3072) 
请求的密钥长度是 3072 位
请设定这个密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0) 0
密钥永远不会过期
这些内容正确吗? (y/N) y
......
请注意这个密钥不能用于加密。您可能想要使用“--edit-key”命令来
生成一个用于此用途的子密钥。
pub   rsa3072 2021-01-18 [SC]
      XXXXXXXXX公钥在此,请记住后面有用XXXXXXXXXX
uid                      flyzing (for mybatis-genl) <flyzing@126.com>

(3)将公钥上传到公钥服务器

gpg --keyserver hkp://pool.sks-keyservers.net --send-keys XXXXXXXXX公钥在此,请记住后面有用XXXXXXXXXX

坑7、pool.sks-keyservers.net访问不了,报错:

gpg: 发送至公钥服务器失败:No route to host
gpg: 发送至公钥服务器失败:No route to host

先导出

gpg --export flyzing@126.com > ~/Downloads/my_key.pub

然后在https://keys.openpgp.org/upload手动上传

0

3、pom.xml添加插件配置,生成source,doc,关联gpg签名

<profiles>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <!-- Source -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>2.2.1</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>jar-no-fork</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- Javadoc -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-javadoc-plugin</artifactId>
                        <version>2.9.1</version>
                        <configuration>
                            <!-- jdk1.8要加上,1.7要去掉,否则会报错 -->
				<additionalJOptions>
    				<additionalJOption>-Xdoclint:none</additionalJOption>
    			</additionalJOptions>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <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>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>

4、命令行发布

mvn clean deploy -Prelease

坑8、maven-javadoc-plugin生成文档报错,注解强校验。

报错:未知标记 Date,@return 没有说明等,

pom.xml中maven-javadoc-plugin添加:

<configuration>
    <!-- jdk1.8要加上,1.7要去掉,否则会报错 -->
    <additionalJOptions>
        <additionalJOption>-Xdoclint:none</additionalJOption>
    </additionalJOptions>
</configuration>

坑9、gpg 终端无法弹出密码输入页面。

报错:gpg: signing failed: Inappropriate ioctl for device

export GPG_TTY=$(tty)

5、审核发布

https://oss.sonatype.org先登录自己账号,然后Staging Repositories中选中刚刚发布的项目。(我的项目已经release这里看不到了)

初始状态为Open,点击Close,提交系统自动审核,如果审核不通过,下面会显示需要修改的信息,修改完后再次Close。

通过审核后,状态改为Closed,点击Release完成最后的发布。

0

6、通知sonatype.org审核人员已经发布成功,让其同步到正式仓库。

在之前的邮件或评论上也有提到:

0

回到sonatype.org项目地址下添加评论:Released successfully

0

审核人员给与回复,大意是2小时后就可以在中央仓库搜索到了。

0

实际3小时后,登录https://search.maven.org查看结果:

0

最后在sonatype.org项目地址中关闭问题,Over。

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值