将jar包发布到maven中央仓库

最近做了一个swagger-ui的开源项目,因为是采用vue进行解析swagger-json,需要前端支持,为了后端也能方便的使用此功能,所以将vue项目编译后的结果打成jar包放到maven中央仓库供有需要的人进行使用。

将前端项目打成jar供后端使用还有一个好处就是,一些项目可能没有设置跨域,将jar与项目一起运行,就是同源访问,从根源上解决了跨域问题,可以很方便的使用。

申请一个groupId

中央仓库是很多jar的集合,对于maven的使用标识唯一性的由groupIdartifactIdversion三个要素组成,第一个是我们对外需要唯一的,后面两个是我们自己进行规划使用,所以上传中央仓库最重要的是申请一个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加密处理

它是一种基于密钥的加密方式,使用了一对密钥对消息进行加密和解密,来保证消息的安全传输。

windowsmaclinux都有相应的使用方式。

windows下分为以下六步,我觉得是命令行以下六步都可以

  1. 下载安装GPG环境

    下载地址:https://www.gpg4win.org/

  2. 检查是否安装成功

    打开cmd命令行窗口,输入

gpg --version

执行后成功输出gpg版本即为安装成功

  1. 生成密钥

    命令行执行
gpg --gen-key

根据提示输入用户名和邮箱以及Passphase,其余信息使用默认即可,Passphase即为密码,需记住,后续上传jar包时要用到

  1. 查看公钥

    执行
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

  1. 发布公钥

    执行
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys 29B9DBA6638B7D0DCFFA84ECBB95DD3381441B80

将公钥发布到PGP密钥服务器后,便可以使用本地的私钥来对上传构件进行数字签名,而下载该构件的用户可通过上传的公钥来验证签名,也就是说,大家可以验证这个构件是否由本人上传的,因为有可能该构件被坏人给篡改了。

  1. 验证是否发布成功

    执行
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 jarsource jar的插件配置包,都已经贴到下面,需要注意的是licensesdevelopersscm几个节点在编译及上传过程不需要,但是在发布构建的时候,会进行检查,没有就会检查不通过,所以还是一开始就补全好点。

上传就很简单,直接mvn deploy即可,如果是idea,在maven的工具栏,选择相应的项目进行deploy操作即可

注意:如果在编译的过程中下载不到相关的jar包,你要看下,下载jar是在哪个地址下载,如果是repo1.maven.org这个中央仓库,就要注意是http还是https,发现是http那就要修改下setting.xml中的仓库链接里面的httphttps,因为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中央仓库的更多相关文章

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

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

  2. 贡献你的代码,将jar包发布到Maven中央仓库以及常见错误的解决办法

    前几天将自己的日志工具发布到了Maven中央仓库中.这个工具本省没有多少技术含量,因为是修改别人的源代码实现的,但是将jar发布到Maven仓库却收获颇丰,因为网上有些教程过时了,在此分享下自己发布j ...

  3. Dev 日志 | 如何将 jar 包发布到 Maven 中央仓库

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

  4. 将自己的项目作为jar包发布到maven中央仓库

    maven版本是3.5.0,jdk是1.8(注意,不是说项目是1.8就行,必须是环境变量里的也是,不能超过1.8,否则一大堆问题,执行mvn前用javac -version看下版本) 一:先在sona ...

  5. 如何将自己的jar包发布到mavan中央仓库

    最近自己写了一个关于网关限流的插件,然后想着肯定会有很多兄弟也需要使用到,所以就想着把jar包上传到Maven的中央仓库上让大家可以更方便的使用 现在咱们来看一下这个流程是什么样的呢. 首先呢,你得去 ...

  6. 将jar包发布到maven的中央仓库细节整理

    在学习springboot框架的时候,会引入各种各样的starter依赖,照着教程尝试写了个demo-spring-boot-stater,可以理解为一个组件,随引随用 但是只能自己引用,无法共享,于 ...

  7. 解决Maven本地仓库没有Jar包问题,请求中央仓库自动下载以及手动下载方法

    一.首先指定本地仓库 <localRepository>D:\software\Maven_Home\mvn_repository</localRepository> 二.修改 ...

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

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

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

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

随机推荐

  1. UVA - 10200 Prime Time 关于 double类型 卡精度

    题意: 给定一个区间,a到b, n在区间内,有一个计算素数的公式,n*n+n+41,将n带进去可以得出一个数字.但是这个公式可能不准确,求出这个公式在这个区间内的准确率. 直接模拟就好了,不过要 注意 ...

  2. Python python 五种数据类型--列表

    # 列表的定义 var1 = [] var2 = list() print(type(var1)) #<class 'list'> print(type(var2)) #<class ...

  3. Dome_iptest_server

    一个简单的ip测试服务器 打印返回 请求头request import socket def send_data(conn, data=None, status=200): if status != ...

  4. 前端经典面试题解密:JS的new关键字都干了什么?

    前言 new关键字在实例化获取对象时都做了什么?是一道经常出现在前端面试时的问题.如果只是简单的了解new关键字是实例化构造函数获取对象,是万万不能够的.更深入的层级发生了什么呢?同时面试官想从这道题 ...

  5. D - Super Jumping! Jumping! Jumping!

    Nowadays, a kind of chess game called "Super Jumping! Jumping! Jumping!" is very popular i ...

  6. 树形DP——动态规划与数据结构的结合,在树上做DP

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法与数据结构的第15篇,也是动态规划系列的第4篇. 之前的几篇文章当中一直在聊背包问题,不知道大家有没有觉得有些腻味了.虽然经典的文 ...

  7. 百度在PWA中阐述的弹性布局-[CSS]

    原文链接 响应式布局 自从进入移动互联网时代,响应式布局这个词经常出现在 Web 设计和开发领域,它让 Web 页面在不同尺寸的设备上都具有良好的浏览体验. 开始之前 在讲解响应式布局之前,需要先了解 ...

  8. 1041 Be Unique (20分)(水)

    Being unique is so important to people on Mars that even their lottery is designed in a unique way. ...

  9. iOS, Xcode11,项目提示第三方库报错无法运行 bundle format unrecognized, invalid, or unsuitable

    检查你有没有把静态库和动态库配置错误!! 下图处是配置动态库的地方! 对于动态库和静态库都有使用的时候,注意把静态库设置成“Do not Embeded”

  10. 【Linux】LAMP环境搭建(简易版)

    一. 辅助软件包安装 准备工作:1.Linux系统准备 恢复快照(初始化安装) 设置IP 关闭SELINUX 配置yum源 2.yum -y install gcc gcc-c++ 3.关闭防火墙 4 ...