详细描述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 addressIf 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中央仓库相关推荐

  1. 发布个人项目jar包到maven中央仓库详解

    发布个人项目jar包到maven中央仓库详解 1.在sonatype提交发布工单(Issue) sonatype是由社区支持的开源项目托管服务(Open Source Project Reposito ...

  2. 如何将JAR包发布到Maven中央仓库?

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

  3. 发布/上传Jar包到Maven中央仓库 - 史上最详细

    发布 Jar 包到 Maven 中央仓库 在项目开发过程中,我们常常会使用 Maven / Gradle 从仓库拉取开源的第三方 jar 包,可能是私有仓库,可能是 Maven 中央仓库,也可能是第三 ...

  4. 发布Jar包到Maven中央仓库(为开发开源中间件做准备)

    微信公众号:bugstack虫洞栈 沉淀.分享.成长,专注于原创专题案例,以最易学习编程的方式分享知识,让自己和他人都能有所收获.目前已完成的专题有:Netty4.x实战专题案例.用Java实现JVM ...

  5. 如何将自己的代码发布到Maven中央仓库?

    去年在公司做工作流相关业务时,当时使用flowable做引擎,中途涉及到一些业务上的需求,自己整理了一些代码,考虑到开源精神,当时就想着将于公司业务无关的代码抽离出来,放到Maven中央仓库中,以供别 ...

  6. 将maven项目打包并发布到maven中央仓库

    为什么要把我们的项目打包发布到maven中央仓库? 开源,为了将我们的项目(作为开源组件)开源出去,让全世界的开发者都可以使用maven将我们的组件引入到他们自己的项目中使用. 项目打包发布到mave ...

  7. 如何将自己开源的项目发布到maven中央仓库

    关注"Java艺术"一起来充电吧! 如何将开源项目发布到maven中央仓库,让别人通过依赖使用你的开源项目,想必很多朋友都有过这个想法. 去年我就想将自己开源的一个miniexce ...

  8. idea maven打jar包_Dev 日志 | 如何将 jar 包发布到 Maven 中央仓库

    摘要 Maven 中央仓库并不支持直接上传 jar 包,因此需要将 jar 包发布到一些指定的第三方 Maven 仓库,比如:Sonatype OSSRH 仓库,然后该仓库再将 jar 包同步到 Ma ...

  9. 喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库

    相信通过java和SQLServer开发应用的同学们都经历过如下类似的问题. 微软提供的JDBC官方驱动没有放置在Maven仓库中,这样如果你的Java应用需要访问SQL Server,你不得不下载s ...

最新文章

  1. linux登录ssh怎么保存采集的脚本,ssh自动登录并且su的脚本
  2. Linux 支持显卡sli么,AMD Vega20专业卡将支持XGMI总线交火
  3. 【CF375D】Trees and Queries——树上启发式合并
  4. Jenkins Gitlab持续集成打包平台搭建
  5. 已知一个特殊字符的 unicode 编码值,如何在 ABAP 里打印出这个特殊字符?
  6. mybatis一级,二级缓存。缓存带来的脏读问题
  7. java PageUtil + stream 手动计算List 分页
  8. 哪些情况下sql索引会失效
  9. java foreach6_Java foreach循环是否会创建一个新对象?
  10. 为什么旧硬件的驱动越来越难找了?
  11. oracle数据库tx锁,oracle数据库有把TX锁,如何定位锁在哪?
  12. java实战——照片编辑器
  13. 计算机操作系统试题题库及答案(完整版)
  14. XMLSpy的主要功能介绍
  15. 获取计算机特征码,如何查看计算机特征码
  16. 基于IP搭建SAN存储
  17. android 生成条码,Android -条形码的生成
  18. 代码审计利器-RIPS实践
  19. mysql已启动但无法连接_MySQL无法正常启动,Navicat连接出错,解决2003问题
  20. 查询与退订中国移动短信服务

热门文章

  1. 嵌入式linux汽车仪表,基于ARM和嵌入式Linux的汽车仪表盘研制
  2. 活体机器人学会生孩子:AI进化算法加持变身吃豆人,已经繁殖到「曾孙」
  3. 大小写转化php,怎样用PHP做出人名币大小写的方法转换
  4. Transformer模型技术长文
  5. opa847方波放大电路_采用电压反馈放大器OPA846、OPA847.ppt
  6. 区块链开发者招聘:IOST开发者计划
  7. 出现警告:warning Replace `‘xxx‘` with `“xxx“` prettier/prettier,关闭Prettier代码格式化工具
  8. 微服务化与DDD—分层架构、洋葱架构、六边形架构 架构设计
  9. 游戏编程中的人工智能技术
  10. Unity基础:图片根据文字内容自适应大小(ContentSizeFitter的使用小技巧)