Maven 项目上传至中央仓库以及版本更新

如何将我们自己的库也能这样来使用呢?下面我们将详细的讲解每一步的过程:

一、通过 sonatype 把你的开源库提交到Maven的中心库

1>首先,在 sonatype 官网中注册账号。进入官网的时候比较慢,需要耐心等待。注意要记住账号密码,会用于我们后续的发布及相关操作。

      在 https://issues.sonatype.org 注册账号,需要注意的是密码必须超过 12 位,且包含至少一个大写字符,一个小写字符,一个特殊字符,以及不少于三种的不同字符(字符,数字,符号)。描述的有些拗口,简单说就是包含大写字母、小写字符、符号和数字,并且超过 12 位即可。,这里举列一个:%Wxp987654321。

2.>如图新建一个issue,项目需要选择 Community Support - Open Source Project Repository Hosting、点击新创一个项目         NewProject。

Maven 项目上传至中央仓库以及版本更新_第1张图片

3>参考下图填写概要、Group Id、项目地址、代码管理地址,填写后点击确认提交。

Maven 项目上传至中央仓库以及版本更新_第2张图片

Project URL:项目地址。

SCM URL :项目clone的git地址。

Summary:你的jar包自己起个名字(无要求)。

Group Id:项目标识。

【提醒】确group id对应的是域名,推荐使用个人域名。

首先Central OSSRH 会问你,这个域名是你的么,怎么证明这个域名是你的呢?
方法有三个:

  •     在域名解析中加上一个Txt记录,指向你发布的这个Issues(他称作JIRA ticket:)。(最快)
  •     设置一个指向你的github主页的跳转(有点懵逼)
  •     用pomit.cn的邮箱发送邮件到[email protected](这个真麻烦,为此我得搭个邮件服务器)

     所以,我选择了第一种方式,在dns里加条记录。

在这里插入图片描述
    我的域名是在腾讯云买的,所以需要到腾讯云去配置,如图所示,加一条TXT记录即可,然后回去评论告诉他:
他看完之后会告诉你,“可以上传jar包了,上传完成后告诉我下”,然后你就上传jar包吧。

注:这里的标识不是和你项目中一致的,而是你的项目所在的域名,如果你随便填的话,就会收到邮件确认是否拥有域名,如果是个人的可以挂在开源网站下,我是挂在码云下的,就可以填写如下:com.gitee.你的码云id。如果在GitHub上就用com.gttee。

      点击 Create 之后,你就会进入一个 jira 页面(sonatype 使用jira 来追踪每一个项目进度),与此同时你注册时使用的邮箱中也会收到一封邮件提示你,任务创建成功,正在等待处理。 

 4>创建完毕后就等待一段时间,在通过确认和校验后,sonatype会回复你到时候maven发布会用到的snapshot地址和release地址,并提醒你首次发布后需要回复该issue,。当状态变为“已解决”,就可以上传maven项目了。

Maven 项目上传至中央仓库以及版本更新_第3张图片

审核通过后会收到这样一封邮件,说明你的问题通过了 。

Maven 项目上传至中央仓库以及版本更新_第4张图片

二、gpg 环境安装

gpg的主要作用是生成密钥对,会用于后续我们组件发布的校验。

1> 下载地址:https://www.gnupg.org/download/

2> 如图红色框所示下载并安装、选择对应自己的操作系统。

Maven 项目上传至中央仓库以及版本更新_第5张图片

3> 在安装完成后,执行以下命令生成密钥对,按照提示输入账号、邮箱、密码 (PS: 此处的密码在后面发布会用到,请务必记住) 

gpg --gen-key 

4> 执行命令查看密钥, 此时控制台会输出类似下面的内容

gpg --list-keys

C:/Users/Administrator/AppData/Roaming/gnupg/pubring.kbx
--------------------------------------------------------
pub   rsa2048 2020-03-05 [SC] [expires: 2022-03-05]
      AA7FFADE8B91C3AC08D8A840DD923EEA2BAAED19
uid           [ultimate] xiaozhuzi <[email protected]>
sub   rsa2048 2020-03-05 [E] [expires: 2022-03-05]

其中DD923EEA2BAAED19就是秘钥id。

5> 执行以下命令将公钥发布到服务器中、这里我发布了多个服务器。这里在上传时可以带端口也可以不带,好像都可以都可以上传成功。

gpg --keyserver hkp://keys.gnupg.net --send-keys DD923EEA2BAAED19
gpg –-keyserver hkp://keyserver.ubuntu.com:11371 –-send-keys DD923EEA2BAAED19
gpg –-keyserver hkp://pgp.mit.edu:11371 –-send-keys DD923EEA2BAAED19
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys dd923eea2baaed19
gpg –-keyserver hkp://pool.sks-keyservers.net:11371 –-send-keys DD923EEA2BAAED19

验证是否发送成功:返回如下数据说明成功。

gpg --keyserver hkp://pgp.mit.edu:11371 --recv-keys dd923eea2baaed19
gpg: key DD923EEA2BAAED19: "xiaozhuzi <[email protected]>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1

 如果公钥没有上传成功,在打包到远程仓库会报如下错误。

failureMessage  No public key: Key with id: (1fcda02dd63733fe) was not able to be located on http://pgp.mit.edu:11371/. Upload your public key and try the operation again.
failureMessage  No public key: Key with id: (1fcda02dd63733fe) was not able to be located on http://keyserver.ubuntu.com:11371/. Upload your public key and try the operation again.
failureMessage  No public key: Key with id: (1fcda02dd63733fe) was not able to be located on http://pool.sks-keyservers.net:11371/. Upload your public key and try the operation again.

三、进行maven项目的打包POM文件配置

1>说明:

mybatis.mapper
http://www.wxp.centrt
Demo project for Mybatis mapper

 2>证书

 
        
            The Apache Software License, Version 2.0
            http://www.apache.org/licenses/LICENSE-2.0.txt
            repo
        
    

3>scm软件配置管理

 
        master
        git@https://gitee.com/wxpcode123/xp-mapper.git
        scm:git:git@https://gitee.com/wxpcode123/xp-mapper.git
        scm:git:git@https://gitee.com/wxpcode123/xp-mapper.git
    

4>开发者信息


        
            wxp
            [email protected]
            http://www.wxp.center
        
    

5>打包配置,由于发布到maven中央仓库会要求我们在上传jar到同时,必须同步发布对应到Javadoc、source、asc(利用gpg生成到校验),所以需要在maven中添加以下构建插件


        
            release
            
                
                    
                        org.sonatype.plugins
                        nexus-staging-maven-plugin
                        1.6.8
                        true
                        
                            
                            oss
                            https://oss.sonatype.org/
                            
                            true
                        
                    
                    
                        org.apache.maven.plugins
                        maven-source-plugin
                        2.2.1
                        
                            
                                package
                                
                                    jar-no-fork
                                
                            
                        
                    
                    
                        org.apache.maven.plugins
                        maven-javadoc-plugin
                        2.9.1
                        
                            
                                package
                                
                                    jar
                                
                            
                        
                    
                    
                        org.apache.maven.plugins
                        maven-gpg-plugin
                        1.5
                        
                            
                                verify
                                
                                    sign
                                
                            
                        
                    
                
            
        
    

6>上传打包文件配置


    
        
            
            sonatype_releases
            Nexus Release Repository
            
            https://oss.sonatype.org/service/local/staging/deploy/maven2
        
        
            
            sonatype_snapshots
            Nexus Snapshot Repository
            
            https://oss.sonatype.org/content/repositories/snapshots
        
    

7>添加服务器验证信息,这里的配置的id名称,要在maven的setting.xml文件中配置

 


            oss
            admin
            admin123
     

注:这里的username是你一开始注册sonatype账号的username,而不是注册时填写的邮箱。

四、发布操作

1> 执行以下命令进行发布(如果 pom.xml 中 autoReleaseAfterClose 的值为true,则脚本会自动完成在平台上close、release的操作,至此你将成功发布了,否则我们继续查看第2步)

 mvn clean deploy -P release

这个地方的release就是上面打包配置中的id。所以直接复制就好,打包会运行一会然后出现upload信息,最后提示BuildSuccess说明打包并上传成功了。

打包过程遇到问题:

  • 1.javadoc格式错误,需要将错误问题解决。
  • 2.failureMessage  No public key,这个是gpg秘钥没有上传成功导致,我在实际操作时,明明上传成功,但是还是这样提示,只能多打包几次就可以了,不知道什么原因。解决方法: 如果你知道哪个密钥服务器会被查询,你可以直接在那里上传你的密钥。
  • 3.实验过程中我的实际执行结果是(注意可能会超时,多试几次就好)

Maven 项目上传至中央仓库以及版本更新_第6张图片

2> 登录https://oss.sonatype.org,然后选择staging Repositories

Maven 项目上传至中央仓库以及版本更新_第7张图片

3> 如下图搜索并选择需要发布的组件,依次执行Close、Release操作

 

4> 如果Release成功,并且你是首次发布组件,则需要到你创建到issue中回复 “我已经成功发布该组件”,经历大概2小时后,该组件将会同步到对应的maven仓库 。

5> 如果Close或者Release不成功,你可以如下图操作查看原因并谷歌定位,或者回复咨询

Maven 项目上传至中央仓库以及版本更新_第8张图片

6、>查找开源库 

注意开源库发布出去之后,还是需要等待一段时间,才能在这里 https://search.maven.org/   查找我们的开源库,以及查看如何依赖自己的开源库。

查看仓库文件:https://search.maven.org/artifact/center.wxp/mybatis.mapper

Maven 项目上传至中央仓库以及版本更新_第9张图片

这里能够看到文件说明打包成功。 然后在项目中使用看下能不能从中央仓库下载,如果可以那就大功告成

四、遇到问题总结:

1>Maven javaDoc plugin 乱码解决方案,

参考解决博文:https://blog.csdn.net/crazymakercircle/article/details/80259251

2>maven nexus-stagin 发布超时,多发布几次,或者在页面手动上传。

参考解决博文:https://www.cnblogs.com/alterhu/p/5790266.html

3>在 IntelliJ IDEA 中,pom.xml 里的插件找不到并报红,解决办法

  • 1、手动下载:
mvn dependency:get -DrepoUrl=http://repo.maven.apache.org/maven2/ -Dartifact=org.apache.maven.plugins:maven-gpg-plugin:1.6
  • 2、在 IntelliJ IDEA 中更新 Indexed Maven Repositories

步骤: IntelliJ IDEA -> Preferences -> Build,Execution,Deployment -> Build Tools -> Mavne -> Repositories -> Remote URL -> Update。

参考解决博文:https://segmentfault.com/a/1190000009450347

4>Unable to execute gpg command: Error while executing process. Cannot run program "gpg": CreateProcess error=2, 系统找不到指定的文件

解决办法:使用dos进入项目目录 cd /d D:\StudyPlace\log-spring-boot-starter。

在target文件下有如下三个文件:

将pom.xml复制到target文件下并修改成log-spring-boot-starter-1.0.0.pom 。

使用如下命令在进行手动打包生成.asc签名文件。

mvn gpg:sign-and-deploy-file -DpomFile=target/log-spring-boot-starter-1.0.0.pom -Dfile=target/log-spring-boot-starter-1.0.0.jar -Durl=http://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=oss
mvn gpg:sign-and-deploy-file -DpomFile=target/log-spring-boot-starter-1.0.0.pom -Dfile=target/log-spring-boot-starter-1.0.0-sources.jar -Durl=http://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=oss
mvn gpg:sign-and-deploy-file -DpomFile=target/log-spring-boot-starter-1.0.0.pom -Dfile=target/log-spring-boot-starter-1.0.0-javadoc.jar -Durl=http://oss.sonatype.org/service/local/staging/deploy/maven2/ -DrepositoryId=oss

最后生成如下总共8文件:

Maven 项目上传至中央仓库以及版本更新_第10张图片 这样通过gpg生成签名文件成功,然后通过手动上传发布到中央仓库即可。

五、参考文档

发布构件到Maven中央仓库:https://blog.csdn.net/xiajiqiu/article/details/77610765

Maven中央仓库发布历程:https://www.cnblogs.com/exmyth/p/11567579.html

发布maven项目至中央仓库终极教程与疑难问题汇总解决帖:https://blog.csdn.net/u013407099/article/details/85851113

发布jar包到maven中央仓库(个人域名):https://blog.csdn.net/feiyangtianyao/article/details/87878253

使用Nexus和mvn deploy:deploy-file上传文件到中央库(Maven仓库):https://blog.csdn.net/shi2huang/article/details/80054713

中央仓库官方文档:https://help.sonatype.com/repomanager2/staging-releases/configuring-your-project-for-deployment

你可能感兴趣的:(开发工具使用总结)