将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 ...
随机推荐
- UVA - 10200 Prime Time 关于 double类型 卡精度
题意: 给定一个区间,a到b, n在区间内,有一个计算素数的公式,n*n+n+41,将n带进去可以得出一个数字.但是这个公式可能不准确,求出这个公式在这个区间内的准确率. 直接模拟就好了,不过要 注意 ...
- 使用FME对CAD管网数据进行过滤、聚合、中心点替换
1.首先加载CAD数据,并暴露出需要使用到的相关字段.比如:block_number.fme_geometry.fme_color等字段. 2.对一个元素有多种类型部件的需要进行过滤,例如本次的检修井 ...
- IOS 手动添加第三方库报错问题
当不想使用CocoaPods来管理和使用第三方库的时候,就需要手动添加和配置这些第三方库,难免会出现一些问题,主要问题汇总如下: 1.AFNetworking.NKNetWork.ZxingObjC等 ...
- C语言中结构体内存存储方式
C语言中结构体内存存储方式 结构体的默认存储方式采用以最大字节元素字节数对其方式进行对齐,例如一个结构体中定义有char.int类型元素,则结构体存储空间按照int类型占用字节,如果还有double类 ...
- Java实现自定义数组及其方法
自定义数组 主要功能有增.删(根据索引,根据值).改.查扩容等功能 package array; public class CustomArray { private int[] array = nu ...
- Spring Boot创建一个HelloWorld项目
目录 Spring Boot 简介 微服务框架 以前使用spring开发web的方式 Spring Boot 启动器介绍 如何创建一个helloword的SpringBoot项目 Spring Boo ...
- 玩转控件:封装Dev的SearchLookupEdit
鸣谢 随着前面几个章节对控件封装与扩展的分享,不少小伙伴儿们在作者公众号上反馈,并联系作者,表示通过这些系列和源码能学到不少细节上的东西,并运用到了自己的实际项目当中,也有不少伙伴儿反馈更好更优的处理 ...
- codeforces 1038a(找最长的前k个字母出现相同次数的字符串)
codeforces 1038a You are given a string s of length n, which consists only of the first k letters of ...
- 新手必学linux文本文件编辑命令 vi vim.....
作为一名Linux新手小白,今天就和大家简单地了解一下Linux的Vim文本编辑器的使用. Vim文本编辑器 vim编辑器的三大模式——命令模式.编辑模式和末行模式 命令 ...
- js 中对于this 的理解的 经典案例
function Foo(){ getName = function(){console.log(1);}; return this; }Foo.getName = function(){consol ...