将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 ...
随机推荐
- coding++:Semaphore—RateLimiter-漏桶算法-令牌桶算法
java中对于生产者消费者模型,或者小米手机营销 1分钟卖多少台手机等都存在限流的思想在里面. 关于限流 目前存在两大类,从线程个数(jdk1.5 Semaphore)和RateLimiter速率(g ...
- 使用electron和node-serialport的环境搭建过程
项目运行所需环境 1,必须安装nodejs 附上node下载地址-Nodejs node安装过程简单, 一直next就行了,我安装的版本是12.16.1,可以在powershell中通过 node - ...
- java 下载与配置环境变量
第一:JDK下载 地址:https://www.java.com/zh_CN/download/win10.jsp 注意:自己载点击安装jdk的时候留意一下自己的安装地址,下一步要用: 第二:环 ...
- 一款基于SVM算法的分布式法律助手
一. 项目简介 与 使用说明 体验网站(适配手机端): http://www.zhuchangwu.com 项目基于 Spring Cloud .Vue 构建,平台针对需要维权的用户而设计,主要提供如 ...
- Light of future-冲刺Day 7
目录 1.SCRUM部分: 每个成员进度 SCRUM 会议的照片 签入记录 代码运行截图 用户浏览界面 订单详情界面 管理员浏览界面 新增后台界面 2.PM 报告: 时间表 燃尽图 任务总量变化曲线 ...
- python的字符串、列表、字典和函数
一.字符串 在python中字符串无需通过像php中的explode或者javascript中的split进行分解即可完成切片,可以直接通过下标获取字符串中的每一个字符,下标从0开始,如果从厚望签署, ...
- 玩转redis-延时消息队列
上一篇基于redis的list实现了一个简单的消息队列:玩转redis-简单消息队列 源码地址 使用demo 产品经理经常说的一句话,我们不光要有X功能,还要Y功能,这样客户才能更满意.同样的,只有简 ...
- docker go代码编译上传
一.找需要编译的项目 env GOOS=linux GOARCH=amd64 go build . //编译代码 二.编辑Dockerfile文件, Dcokerfile文件配置: https://w ...
- 使用Maven Archetype创建Java项目模板
1.over view 简而言之,Archetype是一个Maven项目模板工具包.原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的.当我们试图提供一个提供生成Maven项目的一致方 ...
- Array(数组)对象-->reverse() 方法
1.定义和用法 reverse() 方法用于颠倒数组中元素的顺序:倒序. 语法: array.reverse() 举例: var arr = [1,2,3,4,5]; console.log(arr. ...