相关推荐recommended
发布jar包到maven中央仓库
作者:mmseoamin日期:2023-12-14

1. 环境

在网上找的很多文章中写得都有很多问题,这里记录一下最近一次成功地发布jar包到maven中央仓库的过程。并附带上每一个步骤官方的指导链接。

  • 系统:mac(windows系统在下载辅助工具时不太一样,在配置上和mac系统没有区别)

  • IDE:IntelliJ IDEA

  • JDK:1.8

  • maven:3.8.1(IDEA自带的版本)

  • 代码:上传到github上(使用gitee也行)

  • 发布形式:以jar包发布release版本(非SNAPSHOT版本)

    2. 项目配置

    官方对发布的项目做了一些必需的要求,如果不按要求来,发布可能会报错。

    2.1. javadoc和source

    以非pom方式打包的项目(pom.xml配置文件中可以通过标签配置打包方式,默认就是jar),在打包完成后,target目录下必须要包含***-sources.jar和***-javadoc.jar。如下图:

    发布jar包到maven中央仓库,第1张

    为了达成以上效果,需要在pom.xml中依赖两个插件:

    
        
            
                org.apache.maven.plugins
                maven-source-plugin
                2.2.1
                
                    
                        attach-sources
                        
                            jar-no-fork
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-javadoc-plugin
                2.9.1
                
                    
                        attach-javadocs
                        
                            jar
                        
                    
                
            
        
    

    参考:Requirements - The Central Repository Documentation

    2.2. 使用 GPG/PGP 签署文件

    打包完成后,target目录下必须要包含***.jar.sac。如下图:

    发布jar包到maven中央仓库,第2张

    为了达成以上效果,需要在pom.xml中依赖插件(加完插件不要急着构建,还要下载GPG生成密钥,后面会说):

    
        
            org.apache.maven.plugins
            maven-gpg-plugin
            3.1.0
            
                
                    sign-artifacts
                    verify
                    
                        sign
                    
                
            
        
    

    参考:Requirements - The Central Repository Documentation

    2.3. 项目名称和版本配置

    • groupId:使用正确的反向域名。如果有私人域名,可以配置成私人域名(后面配置起来比较麻烦)。如果没有私人域名,可以直接使用github的域名:io.github.{account}(gitee同理,推荐使用这种方式, account是github注册的登录账号)。

      • artifactId:项目名称,可以随意发挥。

        • version:版本,可以使用1.1.1这种格式,不推荐带-SNAPSHOT,快照版本不会直接发布到中央仓库。

          发布jar包到maven中央仓库,第3张

          参考:Requirements - The Central Repository Documentation

          2.4. 项目名称、描述和 URL

          这个是为了增加可读性。

          • name:推荐使用这种格式:${project.groupId}:${project.artifactId},当然也可以自定义。

            • description:项目描述,自己发挥。

              • url:项目地址,直接使用github(或gitee)上项目的地址即可。

                发布jar包到maven中央仓库,第4张

                参考:Requirements - The Central Repository Documentation

                2.5. 许可证书

                可以使用Apache/MIT的许可证书,直接拷贝下面的即可:

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

                参考:Requirements - The Central Repository Documentation

                2.6. 开发人员信息

                留你自己的艺名和邮箱:

                
                        
                        你的艺名
                        你的邮箱
                    
                

                参考:Requirements - The Central Repository Documentation

                2.7. SCM 源码管理系统信息

                可以使用github(或gitee)的项目地址。

                
                    scm:git:git://github.com:maidoubaobao/easy-tool.git
                    scm:git:ssh://github.com:maidoubaobao/easy-tool.git
                    https://github.com/maidoubaobao/easy-tool/tree/master
                

                参考:Requirements - The Central Repository Documentation

                2.8. 文件签名校验(非必需)

                官网说必需要包含.md5和.sha1签名校验文件,但我没有特地去配置这个,也是可以发布的。可以跳过这一步。

                参考:Requirements - The Central Repository Documentation

                3. 在 JIRA 上提发布申请

                3.1. 注册 JIRA

                点击如下链接注册账号并登录,如果有账号直接登录即可:Sign up for Jira - Sonatype JIRA

                参考:OSSRH Guide - The Central Repository Documentation

                3.2. 创建项目

                点击新建,按照下面的图示来填写:

                发布jar包到maven中央仓库,第5张

                发布jar包到maven中央仓库,第6张

                • groupId:要和项目里对应上,必须是一个可用的域名的反转字符串,如果项目是放在github上,必须使用io.github.{account}的格式,否则会审核不通过(注意:不能使用com.github)。

                  • Project URL/SCM url:直接使用github的项目地址即可。

                    3.3. 查看刚刚创建的项目

                    正常情况下创建好默认就会进入刚刚创建的项目,如果进不去,可以按照路径项目-查看所有项目-类别-Central即可看到项目链接,点进去后,切换筛选器我的报告就能看到创建的项目了。

                    发布jar包到maven中央仓库,第7张

                    发布jar包到maven中央仓库,第8张

                    3.4. 在github中创建一个空项目

                    创建好的项目,会分配一个唯一标识OSSRH-***(见上图),需要用这个标识去github上创建一个空项目,这个是为了向核审管理员证明需要发布的github项目确实是你自己的项目。

                    发布jar包到maven中央仓库,第9张

                    3.5. 等待管理员审核

                    管理员都在国外,因为时差,一般隔天才会核审通过。没办法,耐心等着吧。审核通过后,会发邮件(邮箱就是注册JIRA的那个),也会在JIRA项目下出现活动日志。

                    发布jar包到maven中央仓库,第10张

                    4. 获取 GPG 密钥

                    在等待JIRA项目审核的同时,可以并行把GPG密钥搞定。注意:mac系统和windows系统在获取GPG密钥时有些区别,mac全程都是通过命令行搞定的,而windows提供了操作界面,可能会方便一点。这里只介绍mac系统的配置方式,windows系统可以自行搜配置教程。

                    4.1. 安装 GnuPG

                    • 用下面的链接下载 GnuPG,选择系统对应的版本。

                      https://gnupg.org/download/index.html#sec-1-2

                      发布jar包到maven中央仓库,第11张

                      发布jar包到maven中央仓库,第12张

                      • 验证安装是否成功

                        使用gpg --version命令来验证,如果输出了版本则说明安装成功。

                        发布jar包到maven中央仓库,第13张

                        参考:Working with PGP Signatures - The Central Repository Documentation

                        4.2. 生成密钥对

                        使用命令gpg --full-generate-key生成密钥对,2年内有效。执行命令后,需要输入姓名和邮箱(建议和注册JIRA时用的一致),然后输入o(注意是字母o)确认生成。随后会提示输入一个passphrase口令来保护你的密钥对,这个口令要记住,后面配置需要使用。注意:这个命令不建议执行多次,不然生成了多个密钥对,发布时还要去配置使用哪个密钥对,比较麻烦。

                        发布jar包到maven中央仓库,第14张

                        参考:Working with PGP Signatures - The Central Repository Documentation

                        4.3. 发布公钥

                        • 使用命令gpg --keyserver pgp.mit.edu --send-keys 公钥来发布。

                          官网提供了3个地址,有的地址可能不能用,上面这个地址亲测有效。(所以官方也不一定靠谱)

                          发布jar包到maven中央仓库,第15张

                          • 使用命令gpg --keyserver pgp.mit.edu --recv-keys 公钥验证是否发布成功。

                            注意:验证的命令要等一会执行才能响应数据,估计发布可能有点延时,可以多执行几次。反正如果响应如图所示,就代表发布成功了。

                            发布jar包到maven中央仓库,第16张

                            参考:Working with PGP Signatures - The Central Repository Documentation

                            5. JIRA 项目核审通过后的配置

                            5.1. 仓库地址

                            核审通过后,在JIRA上的项目里可以看到日志,这代表项目已经拥有发布权限了。下图标记出来的就是仓库地址。

                            发布jar包到maven中央仓库,第10张

                            5.2. 修改 maven 配置

                            这里修改的是maven的setting.xml配置文件,如果不知道配置文件在哪里(那么你不是一个合格的程序猿),可以在IntelliJ IDEA的settings > Build,Execution,Deployment > Builds Tools > Maven页面找到User settings file。

                            • 配置JIRA账户用于发布

                              • 这里的-是有用的,一会要在项目的pom文件配置中要对应上。

                                
                                    
                                        ossrh
                                        JIRA用户名
                                        JIRA登录密码
                                    
                                
                                • 配置GPG用于文件签署校验

                                  • 前文2.2小节已经在项目中配置了GPG插件了,这里要配置GPG的口令才能进行正常的签署。

                                    • 前文4.2小节生成GPG密钥对的时候,输入过一个口令passphrase,就用那个。

                                      
                                          
                                              ossrh
                                              
                                                  true
                                              
                                              
                                                  gpg2
                                                  GPG口令
                                              
                                          
                                      

                                      5.3. 配置仓库地址和插件

                                      这里是在项目的pom文件中配置。

                                      • 配置发布的仓库地址

                                        • 这里的仓库域名,可以从JIRA项目的日志里看到,核审通过后会给你一个地址,就用那个做为域名。按照下面的格式来配:

                                          
                                              
                                                  
                                                      org.sonatype.plugins
                                                      nexus-staging-maven-plugin
                                                      1.6.13
                                                      true
                                                      
                                                          ossrh
                                                          https://s01.oss.sonatype.org/
                                                          true
                                                      
                                                  
                                              
                                          

                                          6. 发布

                                          JIRA 核审通过后,就可以发布了

                                          6.1. 发布到中央仓库

                                          • 可以直接在IntelliJ IDEA中点击deploy来发布:

                                            发布jar包到maven中央仓库,第18张

                                            • 输出如下结果说明发布成功了:

                                              发布jar包到maven中央仓库,第19张

                                              6.2. 验证发布结果

                                              发布成功以后,并不能立刻在maven中央仓库中搜索到,大概隔一天以后才能搜索得到,所以不要心急,耐心等待。

                                              • JIRA 上的回应

                                                执行完发布动作以后,大概隔了几分钟以后,JIRA项目下会多出一条日志:

                                                发布jar包到maven中央仓库,第20张

                                                这条日志给出了两个地址和两个时间,反正差不多要等个那么长的时间才能搜得到。我已经发布到中央仓库里了,第一个地址里还是找不到,但是第二个地址里能搜到:

                                                发布jar包到maven中央仓库,第21张

                                                下面这个地址好像是执行完发布操作后,过一会就能搜得到,可以试试:Index of /groups/public

                                                • 在中央仓库里搜索

                                                  一般是隔天,才能在中央仓库里搜得到,在阿里云的仓库里也可以搜得到,阿里云本来就是从中央仓库同步的。

                                                  建议使用groupId来搜,一搜一个准。用artifactId来搜在第一页可能找不到,因为maven会对搜索结果做排序。

                                                  发布jar包到maven中央仓库,第22张

                                                  7. 彩蛋

                                                  • JAVA_HOME 报错

                                                    如果遇到这样的报错The environment variable JAVA_HOME is not correctly set,不要慌,一般是因为你本地环境变量没有设置JAVA_HOME或者设置成了jre的目录。如果是因为前者可以去设置一下JAVA_HOME,如果是因为后者,可以把JAVA_HOME的目录改成jdk/bin的目录,或者可以改一下项目的pom配置文件:

                                                    
                                                        org.apache.maven.plugins
                                                        maven-javadoc-plugin
                                                        2.9.1
                                                        
                                                            
                                                                attach-javadocs
                                                                
                                                                    jar
                                                                
                                                                
                                                                    
                                                                    ${java.home}/../bin/javadoc
                                                                
                                                            
                                                        
                                                    

                                                    文章转载自:是秃子迟早会发光的

                                                    原文链接:https://www.cnblogs.com/wind-wound/p/17893935.html