如何把JAR发布到maven中央仓库的几种方法

详细描述maven中央仓库发布jar包的中间过程, 以及遇到的一些问题汇总, 尽量用文字描述清楚, 耐心看下去, 就一定会发布成功

----Sonatype篇----

名词解释:
Sonatype Nexus: Sonatype Nexus helps software development teams use open source so they can innovate faster and automatically control risk

maven社区唯一指定的仓库地址为: https://search.maven.org/ 所以, 我们现在用的远程仓库地址, 无论是哪个, 都是需要去这个仓库同步index的, 然后在把依赖同步到自己的仓库下面

整个maven仓库网络是一个拓扑型架构, 仓库与仓库之间可以互相依赖, 且互相索引

如果想上传jar到公服仓库, 那么首先要打通的就是sonatype, 我们首先去sonatype官网注册个账号, 访问https://issues.sonatype.org/secure/Dashboard.jspa这个地址是sonatype
控制台, 如果未登录, 则会先跳转到登录界面, 点击注册, 填写相关信息, 注册个账号然后登录

1. 进入控制台之后, 点击新建按钮, 新建一个问题(issue)

project   选择community support -open source....
issue    选择new project
summary   填写一些项目简短描述
description 填写项目的描述
group id   这个最重要了, 要与你的工程pom文件里的顶级group id 一致, 而且这个是不能乱填的, 一般来说, 是你自己的域名反写
Project URL 进入到你项目的url, 假如你的项目在github上, 先进到你的项目中, 然后复制地址栏上的地址填进去就可以
SCM url   同上, 但是这个url要填写你的git资源下载地址, 就是项目右侧的clone&download那个按钮弹出来的地址
Username(s) 用户名
Already Synced to Central 默认选NO就可以, 因为暂时我们还不需要同步到中央仓库

2. 等待ISSUE审批, 一般来说, 2分钟左右, 你就会收到审批结果(同时会给你的邮箱发邮件), 告诉你, 要验证你的域名, 也就是你的

group id对应的域名, 会通过以下几种方式验证这个域名是不是你的

Central OSSRH updated OSSRH-xxxxx:
----------------------------------
  Status: Waiting for Response (was: Open)

Do you own the domain gomyck.com? If so, please verify ownership via one of the following methods:
* Add a TXT record to your DNS referencing this issue (Fastest)
* Setup a redirect to your Github page (if it does not already exist)
* Send an email to central@sonatype.com referencing this issue from a gomyck.com email address

If you do not own this domain, please read:
http://central.sonatype.org/pages/choosing-your-coordinates.html
You may also choose a groupId that reflects your project hosting, in this case, something like

这个里面告诉你, 最快的办法就是在你的域名解析中, 添加一条text记录, 我当时就是用的这种方式, 具体操作如下:

  • 进入到域名商网站, 登录之后选择域名解析
  • 点击添加记录, 记录类型选择text
  • 主机记录不要写(默认是@)
  • 记录值写你的问题编号
  • 其他都不需要改, 点击确定

如果填的没问题的话, 大概10分钟左右, 你就会收到审核通过的消息, 告诉你可以上传资源了

com.gomyck has been prepared, now user(s) gomyck,mzxc can:

Deploy snapshot artifacts into repository https://oss.sonatype.org/content/repositories/snapshots
Deploy release artifacts into the staging repository https://oss.sonatype.org/service/local/staging/deploy/maven2
Promote staged artifacts into repository 'Releases'
Download snapshot and release artifacts from group https://oss.sonatype.org/content/groups/public
Download snapshot, release and staged artifacts from staging group https://oss.sonatype.org/content/groups/staging
please comment on this ticket when you promoted your first release, thanks

他告诉你, 如果你提交了版本, 最好告诉他一下, 不用管, 以后我们也不会理他的

----GPG篇----

使用 GPG 生成密钥对

Windows下载 Gpg4win 软件来生成密钥对, 地址:https://www.gpg4win.org/download.html

我用的mac, 使用brew安装的gpg brew install gnupg

使用以下命令来生成秘钥对:

$ gpg --gen-key
#按照提示输入信息, 在输入密码的时候, 如果嫌麻烦就直接摁回车就可以, 这样秘钥就没有密码保护了, 密码保护只有在你的私钥泄露的时候才有用, 其他时候没用

$ gpg --list-keys
#这个指令会显示你的秘钥环, 类似于下面这样
#---------------------------------
# pub  rsa4096 2018-09-25 [SC]
#  EABB59A7BFXXXXXX46604F95ED1503AA8CDxxxx (这个才是秘钥ID)
# uid      [ 绝对 ] xxx (zhushi) <xxx@163.com>
# sub  rsa4096 2018-09-25 [E]

$ gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 秘钥ID
#发送你的公钥到秘钥仓库, 以后你的jar会使用私钥签名, maven中央仓库会去几个指定的秘钥仓库去找公钥来验证这个签名, 如果不上传是不能通过审核的

$ gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 秘钥ID
#验证你的公钥是否上传成功, 如果返回结果是 **未改变, 那就是成功了

----maven篇----

在你的maven顶级工程中加入以下配置

<groupId>com.gomyck</groupId>
<artifactId>gomyck-quickdev</artifactId>
<packaging>pom</packaging>
<version>1.1.0-SNAPSHOT</version>
<name>gomyck-quickdev</name>
<url>http://www.gomyck.com</url>
<description>gomyck 快速开发平台</description>
<developers>
  <developer>
    <id>gomyck</id>
    <name>haoy</name>
    <url>www.gomyck.com</url>
    <email>hao474798383@163.com</email>
  </developer>
</developers>

<licenses>
  <license>
    <name>The Apache Software License, Version 2.0</name>
    <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
  </license>
</licenses>

<scm>
  <connection>scm:git:git@github.com:mzxc/gomyck-fastdfs-spring-boot-starter.git</connection>
  <developerConnection>scm:git:git@github.com:mzxc/gomyck-fastdfs-spring-boot-starter.git</developerConnection>
  <url>git@github.com:mzxc/gomyck-fastdfs-spring-boot-starter.git</url>
</scm>

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-source-plugin</artifactId>
      <version>3.8.0</version>
      <configuration>
        <attach>true</attach>
      </configuration>
      <executions>
        <execution>
          <phase>compile</phase>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-gpg-plugin</artifactId>
      <version>1.6</version>
      <executions>
        <execution>
          <phase>verify</phase>
          <goals>
            <goal>sign</goal>
          </goals>
        </execution>
      </executions>
      <configuration>
        <!-- 你的秘钥ID -->
        <keyname>${gpg.keyname}</keyname>
        <passphraseServerId>${gpg.keyname}</passphraseServerId>
      </configuration>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-javadoc-plugin</artifactId>
      <version>3.1.1</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>jar</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

<distributionManagement>
  <repository>
    <id>sonatype-nexus-staging</id>
    <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
  </repository>
  <snapshotRepository>
    <id>sonatype-nexus-snapshots</id>
    <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
  </snapshotRepository>
</distributionManagement>

在你的settings.xml中加入以下配置

<server>
  <id>sonatype-nexus-snapshots</id>
  <username>sonatype账号</username>
  <password>sonatype密码</password>
</server>
<server>
  <id>sonatype-nexus-staging</id>
  <username>sonatype账号</username>
  <password>sonatype密码</password>
</server>
<profiles>
 <profile>
   <activation>
    <activeByDefault>true</activeByDefault>
   </activation>
   <properties>
    <gpg.keyname>你的秘钥 ID</gpg.keyname>
   </properties>
 </profile>
</profiles>

运行deploy, 如果按照我的步骤一步一步走, 应该没有错误(如果报错也是你的doc问题, 按照提示一步一步改好, 否则maven审核会失败)

----nexus篇----

如果上一步没有错误的话, 访问网址: https://oss.sonatype.org/#stagingRepositories

点击右上角登录, 账号密码就是sonatype的账号密码, 登录进去之后, 点击Staging repositories

在右侧搜索框输入你的group id, 然后点击refresh, 就会看到你的提交信息

选中, 点击close, 这时当前的纪录就会变成一个小齿轮, 表示nexus在校验你的jar

按照剧本, 你的提交应该会全部通过(图标显示数字就是失败, 反之则是成功)

再次选中当前记录, 点击release, 就会上传成功了, 这时sonatype会给你发邮件

以后你只需要按照maven篇deploy, 然后在使用nexus篇提交release就可以了

注意: 如果是snapshot版本, 则不需要审核, 直接deploy就可以直接引用, 但是在maven仓库(https://search.maven.org/)是搜索不到的

----爬坑篇----

1.一开始总是提示文件验证签名失败, 提示我说没有在秘钥仓库找到对应的公钥, 但是我本地可以确定的是提交了且ID一致, 后来过了大概1小时, 验证忽然就过了,
这期间, 我把nexus提示的秘钥仓库地址都复制出来, 挨个上传我的公钥, 最后不知道是哪个仓库生效了, 但是我觉得是仓库延迟问题

2.以后写代码一定要把doc写好, 不然遇见这种场景, 简直就是折磨, 尤其doc多的时候

3.如果你有多个gpg秘钥, 一定要指定秘钥ID, 不然gpg插件是秘钥环的顺序来对你的工程签名的, 这会导致你上传的公钥不一定对应的上签名的私钥, 秘钥的ID请在settings.xml中配置profile, gpg插件的配置请到apache-gpg官网看

4.sonatype在国内环境下, 访问非常困难, 建议找个科学上网的方式, 来实践本教程

到此这篇关于如何把JAR发布到maven中央仓库的几种方法的文章就介绍到这了,更多相关JAR发布到maven中央仓库内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解如何将JAR包发布到Maven中央仓库

    将jar包发布到Maven中央仓库(Maven Central Repository),这样所有的Java开发者都可以使用Maven直接导入依赖,例如fundebug-java: <!-- https://mvnrepository.com/artifact/com.fundebug/fundebug-java --> <dependency> <groupId>com.fundebug</groupId> <artifactId>fundebu

  • Maven发布Jar包中文乱码解决方法

    Maven deploy 乱码 今天使用Maven发布Jar包时,发布功能都是正常的也成功上传到了仓库,就是项目跑越来后出中文中现了乱码: { "code": "SUCCESS", "success": true, "message": "鎿嶄綔鎴愬姛", "data": [ { "key": "app_force_login", "va

  • 如何把JAR发布到maven中央仓库的几种方法

    详细描述maven中央仓库发布jar包的中间过程, 以及遇到的一些问题汇总, 尽量用文字描述清楚, 耐心看下去, 就一定会发布成功 ----Sonatype篇---- 名词解释: Sonatype Nexus: Sonatype Nexus helps software development teams use open source so they can innovate faster and automatically control risk maven社区唯一指定的仓库地址为: ht

  • 上传自己的jar包到maven中央仓库的快速操作方法

    目录 (一)概述 (二)注册jira (三)发布申请 (四)发布项目 4.1 安装配置gpg 4.2 配置maven的setting.xml 4.3 配置pom文件 4.4 打包上传 (五)发布 (六)总结 (一)概述 现在网络上已经有不少上传jar包至中央仓库的教程,但是我搜了一大圈之后发现当时的做法目前并不适用,因此决定自己写下上传jar包至中央仓库的方式,写这篇文章的时间是2021年8月18日. (二)注册jira 本文档通过sonatype上传jar包至maven中央仓库,Sonatyp

  • 使用CI/CD工具Github Action发布jar到Maven中央仓库的详细介绍

    之前发布开源项目Payment Spring Boot到Maven中央仓库我都是手动执行mvn deploy,在CI/CD大行其道的今天使用这种方式有点"原始".于是我一直在寻求一种能够支持流水线作业的发布工具,能让我在进行合并代码时自动触发构建发布.有一款免费的产品能做到这一点,它就是Github Action. Github Action Github Action是由Github创建的CI/CD服务. 它的目的是使所有软件开发工作流程的自动化变得容易. 直接从GitHub构建,测

  • Maven中央仓库发布的实现方法

    目录 一.前言 二.环境准备 三.步骤说明 1.工单创建 2.gpg 环境安装 3.Maven全局配置 4.项目maven配置 5.发布操作 四.参考文档 一.前言 最近自己在学习Spring boot的过程中开发了一个组件 multithreadpool-spring-boot-starter,通过这个组件,我们可以动态根据配置文件进行多个线程池的初始化.既然有这个产出后,肯定是希望能够上传到maven中央仓库,给更多的人使用,于是就产生了这次项目发布经历. 整个过程可谓是一波三折,由于平时工

  • Maven中央仓库正式成为Oracle官方JDBC驱动程序组件分发中心(推荐)

    1. 前言 相信参与使用Oracle数据库进行项目开发.运维的同学常常被Oracle JDBC驱动的Maven依赖折磨.现在这一情况在今年二月份得到了改变,甲骨文这个老顽固终于开窍了. 一位甲骨文的工程师发布博客:在Maven中央仓库中,现在不单单最新版本的Oracle JDBC驱动程序,而且还可以找到以往所有的Oracle JDBC驱动发行版,包括19.6.0.0.19.3.0.0.18.3.0.0.12.2.0.1和11.2.0.4.Maven中央仓库正式成为Oracle官方的JDBC驱动程

  • 如何使用gradle将java项目推送至maven中央仓库

    目录 一.注册Sonatype账号申请创建项目 二.等待Sonatype申请批复 三.生成GPG 四.配置gradle 五.Sonatype将项目同步至Maven中央仓库 一.注册Sonatype账号申请创建项目 到链接:https://issues.sonatype.org/注册一个账号. 创建点击顶部导航栏的 create 创建项目 如上填写,注意的是group id我这里使用的是gitee的二级域名地址,这个域名必须是真实的,与project url中的一致.或者自己有一个域名按照提示的链

  • 手撸一个Spring Boot Starter并上传到Maven中央仓库

    目录 打包上传到中央仓库 第一步 在issues.sonatype.org注册一个账号 第二步 在issues.sonatype.org提交Issue 第三步 配置Maven Setting.xml 第四步 配置项目的pom.xml 第五步 安装和配置GPG 第六步 项目打包上传 第七步 处理验证 问题 我1.0.1版本发布错了,有办法修改或者删除吗? 先手撸一个Spring Boot Starter 准备搞个项目,包含以下几个功能后边还会加新功能. 配置项加密(已实现) 服务调用链 数据脱敏

  • 详解maven中央仓库连不上的解决办法

    方案一.使用国内的镜像阿里仓库等 首先通过maven的路径找到setting.xml的文件 然后在其中修改mirror和profile 保存一下就好了 方案二:https://maven.aliyun.com/mvn/search打开这个网站在里面下载你需要的jar包放到自己的本地仓库中 到此这篇关于详解maven中央仓库连不上的解决办法的文章就介绍到这了,更多相关maven中央仓库连不上内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • Maven中央仓库地址配置大全

    在上一篇文章中完成了 <Maven镜像地址大全 >,后来又花了时间又去收集并整理了关于 maven 远程仓库地址,并整理于此,关于 Maven 远程仓库地址的配置方式有两种, 第一种:直接在项目的 pom.xml 文件中进行修改(不推荐,尤其是在多人协助的开发过程中非常的费事费力): 第二种:将 Maven 的远程仓库统一的配置到 Maven 的 Settings.xml 的配置文件中: Maven 中央仓库地址大全 1.阿里中央仓库(首推1) <repository> <i

随机推荐