将jar包发布到maven中央仓库
将jar包发布到maven中央仓库
最近做了一个swagger-ui的开源项目,因为是采用vue进行解析swagger-json,需要前端支持,为了后端也能方便的使用此功能,所以将vue项目编译后的结果打成jar包放到maven中央仓库供有需要的人进行使用。
将前端项目打成jar供后端使用还有一个好处就是,一些项目可能没有设置跨域,将jar与项目一起运行,就是同源访问,从根源上解决了跨域问题,可以很方便的使用。
申请一个groupId
中央仓库是很多jar的集合,对于maven的使用标识唯一性的由groupId、artifactId、version三个要素组成,第一个是我们对外需要唯一的,后面两个是我们自己进行规划使用,所以上传中央仓库最重要的是申请一个groupId,此groupId与你要上传的jar包的groupId必须一致。
注册账号
注册地址:https://issues.sonatype.org/secure/Signup!default.jspa
账号和密码,在登陆工单系统和提交时会用到,需要牢记。
申请groupId
申请地址
https://issues.sonatype.org/secure/Dashboard.jspa
点击新建

- 项目:
Community Support - Open Source Project Repository Hosting - 问题类型:
New Project - 概要:描述下你要做的事情,尽量使用英文,可使用使用有道辅助翻译一下
- 描述:可空,可以随便写点你为什么要申请一个
groupId - Group Id:非常重要,填写一个唯一的,一般以自有域名比如
com.tennetcn.free这种,当前还可以是github的用户,可以填写com.github.chfree这种。不论填写哪种应该都是有相应的验证规则,我是自有域名,进行了域名的TXT解析验证 - Project URL:可以填写你开源项目的地址
- SCM URL:可以与
project url地址一样 - Already Synced to Centra:是否准备好同步到中央仓库,选择yes的话则会覆盖之前的构建。
然后点击新建就可以了,如果时间凑巧,可能马上就有人回复工单,如果是自有域名,则需要进行一下TXT解析验证。
切记:在别人回复了工单,你对工单的相关信息或对域名进行了解析操作,一定进行一下Comment操作,类似告诉当前工单处理人,我已经按你的操作进行了,你在看一下的意思。不然你傻等半天都不会有一下步的工单进度处理。
最后成功会有以下回复,且工单状态会变为已解决,如果你最后上传成功了,可以回来关闭此问题,其实用过jira之类的缺陷管理系统,这点就很好理解了。
com.tennetcn.free has been prepared, now user(s) chfree 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
Release staged artifacts into repository 'Releases'
please comment on this ticket when you promoted your first release, thanks
gpg加密处理
它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。
windows、mac、linux都有相应的使用方式。
windows下分为以下六步,我觉得是命令行以下六步都可以
下载安装
GPG环境
下载地址:https://www.gpg4win.org/检查是否安装成功
打开cmd命令行窗口,输入
gpg --version
执行后成功输出gpg版本即为安装成功
- 生成密钥
命令行执行
gpg --gen-key
根据提示输入用户名和邮箱以及Passphase,其余信息使用默认即可,Passphase即为密码,需记住,后续上传jar包时要用到
- 查看公钥
执行
gpg --list-keys
输出如下信息
/Users/chenghuan/.gnupg/pubring.kbx
--------------------------------------------------------
pub rsa4096 2020-04-24 [SC] [有效至:2024-04-24]
29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80
uid [ 绝对 ] chfree <chfree365@qq.com>
sub rsa4096 2020-04-24 [E] [有效至:2024-04-24]
其中的十六进制串29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80即为生成的公钥id
- 发布公钥
执行
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80
将公钥发布到PGP密钥服务器后,便可以使用本地的私钥来对上传构件进行数字签名,而下载该构件的用户可通过上传的公钥来验证签名,也就是说,大家可以验证这个构件是否由本人上传的,因为有可能该构件被坏人给篡改了。
- 验证是否发布成功
执行
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80
成功输出gpg密钥信息即为发布成功
我是用的mac上的一个GPG Keychain,下载地址为https://gpgtools.org/更傻瓜式的界面操作。
项目打包上传
需要将项目打成jar包上传到中央仓库,在打jar包的过程中就需要用到我们gpg生成的秘钥信息,当然最主要的还是配置pom文件
配置setting.xml
在setting中,主要配置我们第一步中注册的账户和密码,因为setting.xml是本地的,而pom.xml是要上传到源码服务器中,所以是在setting.xml中。
可以找到ide对应的maven配置项,当前ide对应的setting.xml在哪个路径,如果没有配置,可以下载一个apache-maven的包,解压后里面有setting.xml进行配置
在setting.xml中配置如下:
<server>
<id>maven_nexus_repo</id>
<username>username</username>
<password>password</password>
</server>
这个id在后面配置pom.xml的时候还会用到,在进行deploy操作的时候,就是根据id名称从这个setting.xml中提取用户名和密码进行上传权限验证。
配置pom.xml
相关的xml配置及上传会验证的doc jar、source jar的插件配置包,都已经贴到下面,需要注意的是licenses、developers、scm几个节点在编译及上传过程不需要,但是在发布构建的时候,会进行检查,没有就会检查不通过,所以还是一开始就补全好点。
上传就很简单,直接mvn deploy即可,如果是idea,在maven的工具栏,选择相应的项目进行deploy操作即可
注意:如果在编译的过程中下载不到相关的jar包,你要看下,下载jar是在哪个地址下载,如果是repo1.maven.org这个中央仓库,就要注意是http还是https,发现是http那就要修改下setting.xml中的仓库链接里面的http为https,因为maven.org已经不支持http了。
<modelVersion>4.0.0</modelVersion>
<groupId>com.tennetcn.free</groupId>
<artifactId>think-swagger-ui-starter</artifactId>
<packaging>jar</packaging>
<version>0.0.4</version>
<description>swagger-ui</description>
<url>https://github.com/chfree/think-free-base</url>
<licenses>
<!-- MIT许可证 -->
<license>
<name>MIT License</name>
<url>http://www.opensource.org/licenses/mit-license.php</url>
</license>
<!-- Apache许可证 -->
<!-- <license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license> -->
</licenses>
<developers>
<developer>
<name>chfree</name>
<email>chfree365@qq.com</email>
<url>http://www.tennetcn.com</url>
</developer>
</developers>
<scm>
<tag>master</tag>
<connection>https://github.com/chfree/think-free-base</connection>
<developerConnection>https://github.com/chfree</developerConnection>
<url>https://github.com/chfree/think-free-base/tree/master/think-swagger-ui-starter</url>
</scm>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
</dependency>
</dependencies>
<profiles>
<profile>
<id>ossrh</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<!-- 要生成Javadoc和Source jar文件,您必须配置javadoc和源Maven插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- 必须配置GPG插件用于使用以下配置对组件进行签名 -->
<!-- GPG -->
<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>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<!-- 这个id需要在setting.xml中设置 -->
<id>maven_nexus_repo</id>
<name>maven_nexus_repo</name>
<!-- 这里的url就是Issue中回复的snapshots 的repo地址-->
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>maven_nexus_repo</id>
<name>maven_nexus_repo</name>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2</url>
</repository>
</distributionManagement>
</profile>
</profiles>
构件仓库操作
当所有的上传操作处理完,就需要登录到构建发布地址,因为现在所有的操作都是将我们的jar包发布到了缓存仓库,需要进行后续操作才是发布到正式仓库,否则在search.maven.org中怎么都是搜索不到的。
构建发布地址:https://oss.sonatype.org/#welcome
用户名和密码就是第一步中申请的的用户名和密码。
登陆后在左边有一些菜单,在Staging Respositories下就能看到我们上次的缓存jar列表,勾选对应的数据,点击上面工具栏的close,先关闭缓存状态。等待一会儿,刷新当前记录,记录不是open后,就可以勾选点击release。
如果上传的jar不符合规范,一般是pom中不规范或是没有doc jar,source jar等情况,及会在close的时候会提示出相关异常,我们只需要解决相关异常即可重新上传,此时是不需要改版本号。
当你进行了release后,你的注册账号的邮箱就会收到一封邮件,告诉你发布成功了,但是在https://search.maven.org中搜索到还需要2小时左右。但你基本就可以通过pom来下载你的jar了。
将jar包发布到maven中央仓库的更多相关文章
- 如何将JAR包发布到Maven中央仓库?
将jar包发布到Maven中央仓库(Maven Central Repository),这样所有的Java开发者都可以使用Maven直接导入依赖,例如fundebug-java: <!-- ht ...
- 贡献你的代码,将jar包发布到Maven中央仓库以及常见错误的解决办法
前几天将自己的日志工具发布到了Maven中央仓库中.这个工具本省没有多少技术含量,因为是修改别人的源代码实现的,但是将jar发布到Maven仓库却收获颇丰,因为网上有些教程过时了,在此分享下自己发布j ...
- Dev 日志 | 如何将 jar 包发布到 Maven 中央仓库
摘要 Maven 中央仓库并不支持直接上传 jar 包,因此需要将 jar 包发布到一些指定的第三方 Maven 仓库,比如:Sonatype OSSRH 仓库,然后该仓库再将 jar 包同步到 Ma ...
- 将自己的项目作为jar包发布到maven中央仓库
maven版本是3.5.0,jdk是1.8(注意,不是说项目是1.8就行,必须是环境变量里的也是,不能超过1.8,否则一大堆问题,执行mvn前用javac -version看下版本) 一:先在sona ...
- 如何将自己的jar包发布到mavan中央仓库
最近自己写了一个关于网关限流的插件,然后想着肯定会有很多兄弟也需要使用到,所以就想着把jar包上传到Maven的中央仓库上让大家可以更方便的使用 现在咱们来看一下这个流程是什么样的呢. 首先呢,你得去 ...
- 将jar包发布到maven的中央仓库细节整理
在学习springboot框架的时候,会引入各种各样的starter依赖,照着教程尝试写了个demo-spring-boot-stater,可以理解为一个组件,随引随用 但是只能自己引用,无法共享,于 ...
- 解决Maven本地仓库没有Jar包问题,请求中央仓库自动下载以及手动下载方法
一.首先指定本地仓库 <localRepository>D:\software\Maven_Home\mvn_repository</localRepository> 二.修改 ...
- 如何将自己的代码发布到Maven中央仓库?
去年在公司做工作流相关业务时,当时使用flowable做引擎,中途涉及到一些业务上的需求,自己整理了一些代码,考虑到开源精神,当时就想着将于公司业务无关的代码抽离出来,放到Maven中央仓库中,以供别 ...
- 喜大普奔,微软Microsoft JDBC Driver For SQL Server已发布到maven中央仓库
相信通过java和SQLServer开发应用的同学们都经历过如下类似的问题. 微软提供的JDBC官方驱动没有放置在Maven仓库中,这样如果你的Java应用需要访问SQL Server,你不得不下载s ...
随机推荐
- 【强烈推荐】适合Flutter初学者的完整项目
简介 Flutter Fly是什么?Flutter Fly是一款开源的Flutter 项目,非常适合初学者进行学习.App内集成了160+Flutter基础控件的详细介绍及用法,内容来源于:http: ...
- Mybatis 小记
1,mybatis 中 $ # 区别 mybatis 动态传参的两种方式 #{ }在动态解析的时候,会将#{ } 解析为一个预编译阶段的一个标记符号?,在预处理阶段才会替换 ${ }在动态解析的时候, ...
- mongodb的增加和删除
一 mongodb中使用insert()方法来增加集合中的文档: db.myTable.insert({name:'arvin',age:12}) //对名为myTable的集合插入数据 插入数据 ...
- Codeforces 1332F - Independent Set(树dp)
题目链接 题意 给出一棵 n 个点的树, 求它的所有非空诱导子图的独立集种类数之和, 对 998244353 取模. n ≤ 3e5. 题解 不妨假设在独立集中的点被染色成 1, 其余不染色; 由于不 ...
- Mac OS安装Go语言及配置VSCode开发环境:一个工具(gopls)解千愁
前言 截止到目前为止,Go语言已经更新到1.14.1,网上的很多教程均已经过时,我在此汇总并整理一下相关的教程,提供一个适合当下的Mac OS教程. 教程中使用了Go在1.11之后推出的依赖包管理工具 ...
- python fabric 练习记录
https://blog.csdn.net/freeking101/article/details/81103945 fabric 域名
- 谈谈surging 与多语言混合微服务构思
1.前言 微服务架构已成为目前互联网架构的趋势,关于微服务的讨论,几乎是各大技术论坛.技术大会的热门话题.而Surging是高性能的模块化微服务引擎,是大家首选微服务引擎架构之一,而针对于框架有个突出 ...
- jQuery学习笔记01
1.jQuery介绍 1.1什么是jQuery ? jQuery,顾名思义,也就是JavaScript和查询(Query),它就是辅助JavaScript开发的js类库. 1.2 jQuery核心思想 ...
- Bitmap之位图采样和内存计算详解
原文首发于微信公众号:躬行之(jzman-blog) Android 开发中经常考虑的一个问题就是 OOM(Out Of Memory),也就是内存溢出,一方面大量加载图片时有可能出现 OOM, 通过 ...
- Codeforces Global Round 7
A. Bad Ugly Numbers 思路 题意: 给我们一个k,让我们用 0-9 之间的数字构成一个 k位数a,a不能被组成a的每一位数字整除. 分析:首先 k等于1,无论我们怎么配都会被整除:当 ...