您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

Java项目发布到Maven中央仓库操作步骤及相关注意事项

时间:2021-07-05 10:15:31  来源:今日头条  作者:疯狂架构师

1 注册maven(oss)账号

注册地址:
https://issues.sonatype.org/secure/Signup!default.jspa

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

注册成功后登陆到首页

2 创建一个Issue

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

Project: 项目类型,一般为Community Support。

Issue Type: 问题类型, 新的项目为New Project。

Summary:项目名称,如HASentinel。

Description:项目描述,介绍一下当前项目。

Group Id:对应pom.xml里的group id。如果你有个人或企业的域名,可以为公司的域名,审核时候需要验证当前域名为本人所有,如com.eeeffff.hasentinel,其中com.eeeffff须为域名eeeffff.com的拥有者,如果没有可以写github对应的个人地址(如:com.github.potenstop)

Project URL: 项目的地址,如
https://github.com/fenglibin/HASentinel 。

SCM url:项目对应的下载地址,如
https://github.com/fenglibin/HASentinel .git。

其他保持默认。填写完成后就可以create了。

3 域名拥有者验证

项目创建成功后,会有一个项目编辑,如下所示:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

然后根据其要求,到域名提供商那里做一条TXT解析,这是最快的一种认证方式:

域名服务商增加该域名eeeffff.com的TXT解析:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

记录值即为为该项目对应的项目代码值。

4 pgp生产秘钥key

我的电脑是linux Ubuntu18,Ubuntu本身包含了gpg这个命令,因而不需要额外的下载,如果是其它系统,可能需要下载相应的软件或命令。

生成加密key,使用命令“gpg --gen-key”:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

查看生成的加密Key,使用命令“gpg --list-keys”:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

将加密Key推送加远程加密服务器,此处我推到Ubuntu的加密服务器:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

推送如果不报错,则说明推成功,如果推失败则多尝试几次,或者换一个远程加密服务器,加密服务器之间会相互同步数据。

查看推送的加密Key:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

这步一定要验证一下,以确保推送真的成功了,如果获取失败则多尝试几次,我这边第一次操作就显示失败了。

5 配置settings.xml

在maven对应的config目录下的settings.xml中的services节点下增加一个service节点,配置你当前sonatype的用户名和密码,用于后续jar包远程推送到maven做权限验证,这里的id要和pom.xml中distributionManagement配置的id要一一对应,如我配置的为

<server>
    <id>ossrh</id>
    <username>maven_username</username>
    <password>maven_password</password>
</server>

6 配置pom.xml

发布到maven仓库的项目,要求配置如下内容:

name: 项目名称。

description: 项目描述。

url: 项目地址

licenses: 开源协议。

developers: 开发者列表。

scm: 项目的git地址相关。

profiles: 配置不同的环境。比如开发环境 测试环境 发布环境。

groupId: 定义当前maven项目隶属的实际项目。

artifactId: 该元素定义实际项目中的一个Maven项目(模块).

version: 版本号, 带SNAPSHOT为快照版本,否则为 release 版本。

build: 插件。需要加上maven-source-plugin、maven-JAVAdoc-plugin、maven-gpg-plugin三个插件

dependencies: 依赖的模块。

pom.xml 配置参考如下截图及配置代码所示:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

        <!-- 配置必须的插件 -->
        <plugins>
            <plugin>
                <groupId>org.Apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                </configuration>
            </plugin>
 
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>${maven.deploy.version}</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<version>3.2.1</version>
				<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>
				<version>3.3.0</version>
				<executions>
					<execution>
						<id>attach-javadocs</id>
						<goals>
							<goal>jar</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-gpg-plugin</artifactId>
				<version>3.0.1</version>
				<executions>
					<execution>
						<id>sign-artifacts</id>
						<phase>verify</phase>
						<goals>
							<goal>sign</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
        </plugins>
        <!-- 配置项目发布的maven仓库路径 -->
        <distributionManagement>
        <repository>
            <id>ossrh</id>
            <name>Release</name>
            <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
        </repository>
 
        <snapshotRepository>
            <id>ossrh</id>
            <name>SNAPSHOTS</name>
            <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
        </snapshotRepository>
    </distributionManagement>

7 发布版本

都配置成功后,此时转到项目的根目录下,执行如下maven打包及发布命令:

mvn clean source:jar install deploy -Dmaven.test.skip

如果没有报错,则输出如下截图所示:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

此时可以在创建项目的sonatype页面给负责和你对接的人留言,让他执行下一步操作,他会告诉你下一步该做什么:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

8 在oss查看快照

发布快照版本,只需要在版本号后面加上SNAPSHOT字符串,重新打包即可,Maven会自动判断当前发布为快照版本,快照版本可以无限次发布,不需要在仓库中删除后再发布。

查看地址:
https://s01.oss.sonatype.org

可以根据GroupID搜索对应工程的快照的信息,查看快照是不需要登陆的,如下图所示。

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

9 发布和查看release版本

发布release版本只需要去掉版本号后面的的SNAPSHOT,重新执行deploy即可,但是请记住,此时deploy成功并不是真的发到了线上的Maven仓库,此时相当于发到了一个预发布仓库,此时需要用户去执行项目检查,包括javadoc生成是否符合规范、pom文件是否包含了scm地址等信息、是否通过gpg生成了校验asc文件等等,如果通不过会有相应的提示,完成这些修改后才能后关闭当前issue,执行真正的发布动作。

查看release版本需要登录才可以看到, 用户名和密码和注册maven一致。

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

执行项目检查的步骤:1)选中一个项目;2)执行上面的Close操作,然后项目会执行规范及安全检查,如果通过则release按钮会变得可用,如果检验没有通过,则会有相应的提示信息,需要根据提示修改,在执行下一次执行deploy之前,先通过Drop功能删除掉当前项目。

校验不通过大致信息如下所示:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

此处展示了三种类型的错误:

签名校验错误;

pom文件校验错误;

Javadoc校验错误。

10 正式同步到Maven中央库

如果是第一次发布,需要在release成功后在之前的issue添加评论,告知该项目预计release成功。如下图:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 

待管理人员正式执行同步,等待一段时间,就可以在maven的正式仓库中执行到该项目了。

Maven仓库(https://search.maven.org/)中搜索项目:

Java项目发布到Maven中央仓库操作步骤及相关注意事项

 



Tags:Java   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  Tags: Java  点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Tags: Java  点击:(5)  评论:(0)  加入收藏
1、通过条件判断给变量赋值布尔值的正确姿势// badif (a === &#39;a&#39;) { b = true} else { b = false}// goodb = a === &#39;a&#39;2、在if中判断数组长度不为零...【详细内容】
2021-12-24  Tags: Java  点击:(5)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  Tags: Java  点击:(10)  评论:(0)  加入收藏
传统游戏项目一般使用TCP协议进行通信,得益于它的稳定和可靠,不过在网络不稳定的情况下,会出现丢包严重。不过近期有不少基于UDP的应用层协议,声称对UDP的不可靠进行了改造,这意...【详细内容】
2021-12-23  Tags: Java  点击:(11)  评论:(0)  加入收藏
文章目录1、Quartz1.1 引入依赖<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version></dependency>...【详细内容】
2021-12-22  Tags: Java  点击:(11)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  Tags: Java  点击:(10)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  Tags: Java  点击:(14)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  Tags: Java  点击:(17)  评论:(0)  加入收藏
给新手朋友分享我收藏的前端必备javascript已经写好的封装好的方法函数,直接可用。方法函数总计:41个;以下给大家介绍有35个,需要整体文档的朋友私信我,1、输入一个值,将其返回数...【详细内容】
2021-12-15  Tags: Java  点击:(19)  评论:(0)  加入收藏
▌简易百科推荐
一、Redis使用过程中一些小的注意点1、不要把Redis当成数据库来使用二、Arrays.asList常见失误需求:把数组转成list集合去处理。方法:Arrays.asList 或者 Java8的stream流式处...【详细内容】
2021-12-27  CF07    Tags:Java   点击:(3)  评论:(0)  加入收藏
文章目录 如何理解面向对象编程? JDK 和 JRE 有什么区别? 如何理解Java中封装,继承、多态特性? 如何理解Java中的字节码对象? 你是如何理解Java中的泛型的? 说说泛型应用...【详细内容】
2021-12-24  Java架构师之路    Tags:JAVA   点击:(5)  评论:(0)  加入收藏
大家好!我是老码农,一个喜欢技术、爱分享的同学,从今天开始和大家持续分享JVM调优方面的经验。JVM调优是个大话题,涉及的知识点很庞大 Java内存模型 垃圾回收机制 各种工具使用 ...【详细内容】
2021-12-23  小码匠和老码农    Tags:JVM调优   点击:(11)  评论:(0)  加入收藏
前言JDBC访问Postgresql的jsonb类型字段当然可以使用Postgresql jdbc驱动中提供的PGobject,但是这样在需要兼容多种数据库的系统开发中显得不那么通用,需要特殊处理。本文介绍...【详细内容】
2021-12-23  dingle    Tags:JDBC   点击:(12)  评论:(0)  加入收藏
Java与Lua相互调用案例比较少,因此项目使用需要做详细的性能测试,本内容只做粗略测试。目前已完成初版Lua-Java调用框架开发,后期有时间准备把框架进行抽象,并开源出来,感兴趣的...【详细内容】
2021-12-23  JAVA小白    Tags:Java   点击:(10)  评论:(0)  加入收藏
Java从版本5开始,在 java.util.concurrent.locks包内给我们提供了除了synchronized关键字以外的几个新的锁功能的实现,ReentrantLock就是其中的一个。但是这并不意味着我们可...【详细内容】
2021-12-17  小西学JAVA    Tags:JAVA并发   点击:(10)  评论:(0)  加入收藏
一、概述final是Java关键字中最常见之一,表示“最终的,不可更改”之意,在Java中也正是这个意思。有final修饰的内容,就会变得与众不同,它们会变成终极存在,其内容成为固定的存在。...【详细内容】
2021-12-15  唯一浩哥    Tags:Java基础   点击:(14)  评论:(0)  加入收藏
1、问题描述关于java中的日志管理logback,去年写过关于logback介绍的文章,这次项目中又优化了下,记录下,希望能帮到需要的朋友。2、解决方案这次其实是碰到了一个问题,一般的情况...【详细内容】
2021-12-15  软件老王    Tags:logback   点击:(17)  评论:(0)  加入收藏
本篇文章我们以AtomicInteger为例子,主要讲解下CAS(Compare And Swap)功能是如何在AtomicInteger中使用的,以及提供CAS功能的Unsafe对象。我们先从一个例子开始吧。假设现在我们...【详细内容】
2021-12-14  小西学JAVA    Tags:JAVA   点击:(21)  评论:(0)  加入收藏
一、概述观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察...【详细内容】
2021-12-13  唯一浩哥    Tags:Java   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条