上传项目到Maven中央仓库

背景

修改了某个开源库的代码,以适应自己的项目情况。之前是临时发布到 github 静态页面去的,现在 github 访问很不稳定,所以需要发布到中央仓库。

注册帐号

入口有点难找,提示一下,在 Build 选项卡里面
https://issues.sonatype.org/secure/Signup!default.jspa

密码设置十分变态,12位,必须包含大小写数字特殊字符,有必要拿小本本记一下。而且最好不要设置在 xml 中需要转义的特殊字符,比如 &,否则后面配置 xml 时还要转义!不要问我为啥知道的。。

Jira申请

点击新建按钮,提一个 issue,只有申请通过了才有可能上传到中央仓库上,一般 5 分钟左右会有回应,我昨晚 10 点左右申请的,不知道是不是时差问题他们回应比较快:

创建 issue

创建 issue

有几个比较重要的地方说明:

1.问题类型一般选 New Project
2.Group Id 的几点要求

  • 如果是域名的话需要提供证明,或者把你的域名暂时重定向到你的 github主页,这样可以验证,比较麻烦
  • 会推荐使用 io.github.xxx (xxx 是你的 github 账户名)
  • com.github.xxx 不能用了
  • xxx 还需要跟下面的 Project URL 中的账户名对应,比如我这里账户名是 linceln,那么如果我的 Group Id 设置为 io.github.lince 也会审核不通过
    我最早用 jiatu.com 这个域名申请不通过
io.github.lince 也无法审核通过

上传

https://central.sonatype.org/publish/publish-maven/
我这次是上传到 Apache Maven,所以接下来的步骤都是参考以上链接做的,从晚上 9 点一直试到夜里 1 点才搞定,中间踩坑经历稍后会记录一下。

Nexus Staging Maven plugin

配置部署到 OSSRH Nexus Repository Manager 的插件,在 pom.xml 中配置插件:


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

此处照抄,所有东西不要去动它,比如 serverId
然后添加仓库管理,id 也不要去改动:


  
    ossrh
    https://s01.oss.sonatype.org/content/repositories/snapshots
  
  
    ossrh
    https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
  

setting.xml

配置 server,注意,这里的 id 和上面配置的 nexus-staging-maven-plugindistributionManagementid 保持一致,然后填入帐号密码:


    
      ossrh
      linceln
      xxxxxxxxxxx
    

Javadoc and Sources 插件

JavaDoc 是必须的,因为这个生成时间很长,有的项目会选择打包时跳过 JavaDoc,但是这样最后会导致可以上传到 sonatype.org,但是无法同步到中央仓库,白忙活一场。


  
    
      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
          
        
      
    
  

GPG 签名组件


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

本地还要先有个 GPG 签名,Windows 版本这里下载:
https://www.gpg4win.org/get-gpg4win.html
安装完生成秘钥就好。

有一步比较关键的是要把公钥上传到公共服务器上,这样我们在上传Jar包等文件时对方可以从公共服务器上下载到并且验证你加密过的文件:

# 给公共服务器上传公钥
$ gpg --keyserver hkp://keyserver.ubuntu.com:11371 --send-keys 
# 验证对方是否接收
$ gpg --keyserver hkp://keyserver.ubuntu.com:11371 --recv-keys 

打包部署

$ mvn clean deploy -DskipTests

部署成功:


部署完成

闭坑指南

1. 注意部署的地址变了,看很多之前的教程还是用 https://oss.sonatype.org 这个地址,然后上传就报 403。

注意地址变化

2. 401 Unauthorized

这个基本都是帐号密码的问题,检查一下帐号密码是否填对了。另外注意 setting.xml 配置的 标签,id 是否和 nexus-staging-maven-plugindistributionManagement 配置的 id 一致:

    
      ossrh
      linceln
      xxxxxxxxxx
    

3. 有的教程会教你使用 org.sonatype.oss:oss-parent:7 这样的配置,这样你就完全不用配置了,但是官方已经标记这个方法不推荐使用了,默认还是上传到 https://oss.sonatype.org,报 403。

    
        org.sonatype.oss
        oss-parent
        7
    
————————————————
版权声明:本文为CSDN博主「VF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tiger435/article/details/50470316
官方不推荐使用 oos-parent

4. 记得生成 JavaDocgpg签名,否则虽然可以上传,但是在 https://oss.sonatype.org/#stagingRepositories close 时报错,无法同步到中央仓库,还要重新来过。

保证上传的文件齐全

5. 以前上传完还需要手动 closerelease,现在 Nexus Staging Maven Plugin 插件可以配置自动执行这个过程。

回到https://oss.sonatype.org/#stagingRepositories,选中刚才发布的构件,并点击上方的close–>Confirm,在下边的Activity选项卡中查看状态,当状态变成closed后,执行Release–>Confirm,并在下边的Activity选项卡中查看状态,成功后构件自动删除,一小段时间(约1-2个小时)后即可同步到maven的中央仓库。
————————————————
版权声明:本文为CSDN博主「VF」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tiger435/article/details/50470316

现在 close 和 release 自动化了

注意,如果没有 JavaDoc 或者 GPG 签名,这一步无法完成,就会报错。

https://mvnrepository.com/

你可能感兴趣的:(上传项目到Maven中央仓库)