记一次完整的Maven中央仓库发布过程


网上文章不少,不过还是踩了一些坑,这里记录一下:

工具和资料

  • QQ群 - Javascript高级爬虫 - 作者自建群,欢迎加入!
  • awesome-java-crawler - 作者收集的爬虫相关工具和资料

创建新项目

  1. Maven中央仓库是由Sonatype维护的,因此需要到他们的JIRA系统,用类似报Bug的方式创建新项目
  2. 首先访问Sonatype的JIRA系统,注册一个账号,地址为 https://issues.sonatype.org/s...
  3. 记好自己在Sonatype上的账号密码,后面需要添加到maven的settings.xml中
  4. 点"Create"按钮,创建一个新的Issue,默认的Issue Type就是New Project,不要改变,依次填好下面的星标部分
  5. 这时候Github上的项目地址、SCM地址(也就是git地址)应该已经确定了;GroupId建议直接用"com.github.用户名",否则需要验证你对域名的所有权
  6. 创建的Issue是需要审核的,当其状态变为Resolved状态,就可以进行项目上传了

创建GPG密钥并上传

  1. Maven中央仓库要求使用GPG密钥对上传的Jar包进行数字签名,因此这一步不可缺少
  2. 我的电脑安装了Windows版Git,里面自带gpg.exe,但是需要先把gpg.exe所在目录加入到PATH环境变量中,比如我的电脑中是D:devGitusrbin,注意和git.exe不在同一个目录。也可以参考其他人的流程使用界面工具创建。
  3. 打开命令行窗口,执行gpg --gen-key,按照提示输入信息,具体见下面的参考“GPG密钥的生成与使用”
  4. 记好私钥的密钥,后面会把它添加到Maven的settings.xml中
  5. 密钥生成之后把你的公钥需要上传到公钥服务器,公钥服务器之间会自动同步

    • 列出你的密钥 gpg --list-secret-keys 输出中pub一行'/'后的8位HEX字符串就是密钥ID
    • 上传到服务器 gpg --keyserver keyserver.ubuntu.com --send-keys <密钥ID>
    • 验证上传结果 gpg --keyserver keyserver.ubuntu.com --recv-keys <密钥ID>

修改Maven的settings.xml文件

  • 标签中添加Sonatype登录信息。Maven发布jar包时需要使用。
    
      
      ossrh
      你的Sonatype账户
      你的Sonatype密码
    
  • 标签中添加GPG的可执行文件名和私钥密码。maven-gpg-plugin插件运行时需要使用。
    
      ossrh
      
        true
      
      
        gpg.exe
        GPG私钥密码
      
    

修改项目的pom.xml文件

  • 根据中央仓库发布要求(见参考),pom中需要提供必要的项目信息,以下元素缺一不可,否则无法发布:

    • modelVersion
    • groupId
    • artifactId
    • version
    • packaging
    • name
    • description
    • url
    • licenses.license
    • developers.developer
    • scm.connection
    • scm.url
  • 需要提供源码jar包和javadoc jar包,并使用gpg签名,因此必须添加相应maven plugin
  • 需要添加distributionManagement以自动上传到Sonatype
  • 下面是一个完整pom示例



  4.0.0

  com.github.rockswang
  java-curl
  1.2.0
  jar

  
    org.sonatype.oss
    oss-parent
    7
  

  java-curl
  Ultra-lightweight CURL implementation in pure java 1.6
  https://github.com/rockswang/java-curl

  
    
      junit
      junit
      4.12
      test
    
  

  
    
      
      
        org.apache.maven.plugins
        maven-compiler-plugin
        3.1
        
          1.6
          1.6
        
      
      
      
        org.apache.maven.plugins
        maven-source-plugin
        2.2.1
        
          
            package
            
              jar-no-fork
            
          
        
      
      
      
        org.apache.maven.plugins
        maven-javadoc-plugin
        2.9.1
        
          -Xdoclint:none
        
        
          
            package
            
              jar
            
          
        
      
      
      
        org.apache.maven.plugins
        maven-gpg-plugin
        1.5
        
          
            sign-artifacts
            verify
            
              sign
            
          
        
      
    
  

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

  
    
      Rocks Wang
      [email protected]
      roxstudio
      https://github.com/rockswang
    
  

  
    scm:git:https://github.com/rockswang/java-curl.git
    scm:git:https://github.com/rockswang/java-curl.git
    https://github.com/rockswang/java-curl
    1.2.0
  

  
    
      ossrh
      OSS Snapshots Repository
      https://oss.sonatype.org/content/repositories/snapshots/
    
    
      ossrh
      OSS Staging Repository
      https://oss.sonatype.org/service/local/staging/deploy/maven2/
    
  

构建和上传

  • 在项目根目录命令行运行 mvn clean deploy verify
  • 若代码正确,配置正常,到这一步构建完即可自动打包并上传到Sonatype的Staging仓库
  • 注意:如果发布正式版本则不要在版本号上添加-SNAPSHOT,否则会被上传到Snapshot仓库

发布并同步到中央仓库

  • 打开Sonatype仓库管理页面 https://oss.sonatype.org/,使用前面的Sonatype账户密码登录
  • 点击左面菜单中的Staging Repositories,在右面的列表中拉到最下面,就能找到自己刚上传的项目,选中它,点击Close
  • 注意点击Close之后,服务器会按照“中央仓库发布要求”逐项验证你的包是否符合规格,大概需要1分钟左右。如果close失败了,点击下部面板的Activity子面板,查看失败原因,然后重新close。
  • 成功Close之后,选中项目,点Release。发布后,项目会自动从Staging列表中删除。
  • 回到Sonatype的JIRA系统中,找到你的issue,加条备注告诉工作人员你已经成功发布了,他们会帮你激活同步过程。只有首次提交需要这个步骤。
  • 同步到中央仓库可能需要几个小时,过段时间再去中央仓库搜索吧。

参考

别人的流程:https://blog.csdn.net/liuhuan...
别人踩的坑:https://blog.csdn.net/h324321...
GPG密钥的生成与使用 https://www.jianshu.com/p/7f1...
中央仓库发布要求:https://central.sonatype.org/...

你可能感兴趣的:(开放源代码,maven)