Java如何将jar包上传到Maven中央仓库(超详细2023最新版)

news2024/11/15 13:41:49

文章目录

  • Java如何将jar包上传到Maven中央仓库
    • 引言
    • Step1:注册 JIRA 账号
    • Step2:发布申请
    • Step3:下载并安装GPG
    • Step4:配置maven的setting.xml
    • Step5:配置pom.xml
    • Step6:上传 jar 包
    • Step7:引入 jar 包
    • Bug记录

Java如何将jar包上传到Maven中央仓库

引言

由于最近我迷上了一个开源项目 JustAuth, 这个开源项目整合许多第三方登录,比如常见的:QQ、Gitee、Github、微信、微博、支付宝等等,号称”一款小而全的第三方登录的开源组件“,出于好奇,我拉去了他在Github上的源码,然后跑了一下他提供的Demo,发现真的相当不错,其中项目应用了许多设计模式,比如:适配器模式(统一接口)、建造者模式(便捷构建对象)、模板方法模式(提高代码复用性),还有其它一些开发技巧,比如:通过注入降低类与类的耦合性、开发规范、通用HTTP客户端的封装、枚举类的常见使用技巧,这些东西都很值得学习,我大概花了一个下午的时间,摸透了这个项目,项目总的来讲还算简单,感兴趣的可以自己拉一下源码研究一下,我也是受到这个项目的启发,于是自己也开发了一个微型版的 SDK ,当然我的 SDK 目前只集成了QQ、微博、Gitee、Github,原项目集成了大概有30个平台,国内国外知名平台都有,还配置有代理,真的是一个很不错的项目,特别是对于我这种小白而言😄可以说是一个入门级别的开源项目,打算以后有时间多研究一下这些知名的开源项目,感觉直接看开源项目比看那些视频要好多的。在开发完 SDK 之后,我就想把自己写的项目像 JustAuth 一样,发布到Maven中央仓库,所以就有了这篇文章,然后自己要用,就直接引入对应的 jar 包就可以了

Step1:注册 JIRA 账号

  • Step1:注册 JIRA 账号

    JIRA 是一个缺陷跟踪管理系统,为针对缺陷管理、任务追踪和项目管理的商业性应用软件,开发者是澳大利亚的Atlassian。JIRA这个名字并不是一个缩写,而是截取自“Gojira”,日文的哥斯拉发音。

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

    image-20230815222041232

    注册的时候要记住账号和密码,Step4需要用到

Step2:发布申请

  • Step2:发布申请

    1)创建项目

    image-20230816191110882

    2)填写项目信息

    image-20230816190355096

    大概等个一两小时就有人在你的项目下面评论了

    image-20230816191447371

    按照它的步骤完成就可以进行下一步了,其实也不用等,可以直接进行下一步(●’◡’●)

    一般而言,如果你使用Gitee或Github作为项目的 group id,那么他会要求你新建一个公开的仓库,让后将当前项目置于开放状态,过一段时间(大概两小时左右),管理员就会留言,告诉你申请通过了,此时我们就可以来到 Step6

Step3:下载并安装GPG

  • Step3:下载并安装GPG

    GNU Privacy Guard是一个密码学软件,用于加密、签名通信内容及管理非对称密码学的密钥。GnuPG 是自由软件,遵循 IETF 订定的 OpenPGP 技术标准设计,并与 PGP 保持兼容。 GnuPG 是自由软件基金会的 GNU 计划的一部分,曾受德国政府资助

    1)下载GPG

    下载连接:https://gnupg.org/download/index.html

    image-20230815222545266

    2)解压并安装

    这一步过于很简单,解压后点击安装无脑下一步(需要注意切换安装目录,默认是安装在C盘)

    安装成功后,我们进入 CMD 窗口,输入 gpg --version后检测是否安装成功,如果出现下面页面就说明安装成功了

    image-20230815222819828

    3)生成密钥

    同样的在 CMD 窗口中输入 gpg --gen-key 指令,然后 输入 用户名 和 账号

    image-20230815231833468

    然后输入下面的指令,就可以获取对应的私钥

    gpg --keyserver hkp://keyserver.ubuntu.com --send-keys 你的公钥
    

    备注:

    1. 忘记了公钥,也可以通过gpg --list-keys查看当前所有的公钥

Step4:配置maven的setting.xml

  • Step4:配置maven的setting.xml

    1)查看你Maven的配置文件所在位置

    img

    2)打开配置文件,添加如下配置

        <servers>
        	<server>
          		<id>ossrh</id>
          		<username>JIRA账号</username>
          		<password>JIRA密码</password>
        	</server>
      	</servers>
    

    注意:id中的值可以任意改,但是后面 pom.xml 中的对应的地方也要改动

Step5:配置pom.xml

  • Step5:配置pom.xml

    打开你要打包的项目,编写如下配置,这里我就直接给出了完整的配置,你只需要自行改动成属于你项目的元素就可以了,不懂的可以评论留言,随时在线解答

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.7.12</version>
            <relativePath/>
        </parent>
    
        <groupId>io.gitee.aghp</groupId>
        <artifactId>api-feign-sdk</artifactId>
        <version>0.0.1</version>
        <name>api-feign-sdk</name>
        <packaging>jar</packaging>
        <url>https://gitee.com/aghp/api-feign-sdk</url>
        <description>一个对请求进行签名的HTTP客户端</description>
    
        <licenses>
            <license>
                <name>Apache License | Version 2.0</name>
                <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
                <distribution>repo</distribution>
                <comments>A business-friendly OSS license</comments>
            </license>
        </licenses>
    
        <scm>
            <url>https://gitee.com/aghp/api-feign-sdk</url>
            <connection>https://gitee.com/aghp/api-feign-sdk.git</connection>
        </scm>
    
        <developers>
            <developer>
                <name>aghp</name>
                <id>aghp</id>
                <email>3254213612@qq.com</email>
                <roles>
                    <role>Developer</role>
                </roles>
                <timezone>+8</timezone>
            </developer>
        </developers>
    
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    
            <maven-javadoc-plugin.version>2.9.1</maven-javadoc-plugin.version>
            <maven-gpg-plugin.version>1.5</maven-gpg-plugin.version>
            <maven-source-plugin.version>2.2.1</maven-source-plugin.version>
            <nexus-staging-maven-plugin.version>1.6.7</nexus-staging-maven-plugin.version>
    
            <java.version>1.8</java.version>
            <spring-boot.version>2.7.12</spring-boot.version>
    
            <server.id.value>ossrh</server.id.value>
        </properties>
    
        
        <dependencies>
            <!--SpringBoot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <!--注解处理器-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
            <!--Lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <!--测试环境-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
            <!--Hutool-->
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.8.16</version>
            </dependency>
        </dependencies>
    
        
        <profiles>
            <profile>
                <id>default</id>
                <activation>
                    <activeByDefault>true</activeByDefault>
                </activation>
                
                <!--管理仓库信息-->
                <distributionManagement>
                    <snapshotRepository>
                        <id>${server.id.value}</id>
                        <url>https://s01.oss.sonatype.org/content/repositories/snapshots</url>
                    </snapshotRepository>
                    <repository>
                        <id>${server.id.value}</id>
                        <url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
                    </repository>
                </distributionManagement>
                
                <build>
                    <plugins>
                        <!--用于与 Sonatype Nexus 仓库进行集成,方便在 Maven 构建过程中进行部署和发布操作-->
                        <plugin>
                            <groupId>org.sonatype.plugins</groupId>
                            <artifactId>nexus-staging-maven-plugin</artifactId>
                            <version>${nexus-staging-maven-plugin.version}</version>
                            <extensions>true</extensions>
                            <configuration>
                                <serverId>${server.id.value}</serverId>
                                <nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
                                <autoReleaseAfterClose>true</autoReleaseAfterClose>
                            </configuration>
                        </plugin>
                        <!--Maven编译插件-->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-source-plugin</artifactId>
                            <version>${maven-source-plugin.version}</version>
                            <executions>
                                <execution>
                                    <id>attach-sources</id>
                                    <goals>
                                        <goal>jar-no-fork</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                        <!--Javadoc插件,用于生成Javadoc文档-->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-javadoc-plugin</artifactId>
                            <version>${maven-javadoc-plugin.version}</version>
                            <configuration>
                                <!-- jdk1.8要加上,1.7要去掉,否则会报错 -->
                                <additionalJOptions>
                                    <additionalJOption>-Xdoclint:none</additionalJOption>
                                </additionalJOptions>
                            </configuration>
                            <executions>
                                <execution>
                                    <id>attach-javadocs</id>
                                    <goals>
                                        <goal>jar</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                        <!--GPG签名插件-->
                        <plugin>
                            <groupId>org.apache.maven.plugins</groupId>
                            <artifactId>maven-gpg-plugin</artifactId>
                            <version>${maven-gpg-plugin.version}</version>
                            <executions>
                                <execution>
                                    <id>sign-artifacts</id>
                                    <phase>verify</phase>
                                    <goals>
                                        <goal>sign</goal>
                                    </goals>
                                </execution>
                            </executions>
                        </plugin>
                    </plugins>
                </build>
                
            </profile>
        </profiles>
    </project>
    

Step6:上传 jar 包

  • Step6:上传 jar 包

    执行下面的指令:

    mvn clean deploy
    

    image-20230816200510909

  • Step7:发布 jar 包

    1)登录:https://s01.oss.sonatype.org/#stagingRepositories

    image-20230816195516135

    2)选中它,然后点击 closed(如果你开启了自动关闭,就可能没有这个选项,你不用慌)

    image-20230816195606861

    3)检测完成后上方的release就会变成可点击的状态,点击release后,你会收到一份邮件

    image-20230816200737694

    4)点击 release 按钮之后,留意邮箱,会受到一封短信

    image-20230816201502646

    看到这封信,我们就可以大功告成了,过段时间我们就可以引入我们上传的 jar 包了,整体来说并不是很难

Step7:引入 jar 包

  • Step7:引入 jar 包

    大概两小时之后,就可以在:https://central.sonatype.com/?smo=true 中搜索我们刚刚上传的 jar 包

    image-20230816203510608

    
    

Bug记录

相信这一步份是大家最期待的吧,其实在发布jar包的过程中我只遇到过一个Bug,这得感谢互联网上哪些大佬分享的 blog,他们的博客都讲解 的十分详细,我其中参考了三篇文章,多看几篇防止出现特殊现象。

  • bug1:执行mvn clean deploy一直报错401

    image-20230816194044178

    问题排查:说实话,这个bug真的很折磨人,我排查了好久,问GPT、百度,都是说权限问题,是GPG签名错误,JIRA账号密码错误,或者 id的value值没有与 pom.xml文件对应,结果我一个一个尝试,基本上都尝试了一遍,最终还是没有发现,我还以为是依赖的问题,当时真的是很无奈。最后我突然想到了一种可能,那就是是不是我的 JIRA 账号的问题, 我的 JIRA 账号是中文,我当时在注册 JIRA账号的时候,在想“我是中国人,就应该用中文注册”,结果发现天真了。

    我没得办法,网上所有的方式我都尝试了,自己也想了很多种可能,最终还是怀疑到是JIRA账号的原因,我的账号是中文名,然后pom.xml文件使用的编码格式是UTF-8,中文在UTF-8和其它编码格式上是不一样的,由于 JIRA账号一旦创建,账号名是不能修改的,于是我重新注册了一个新账号,把之前的账号项目给注销掉,这次账号名改为英文,重新执行mvn clean deploy,一下就成功了┭┮﹏┭┮,下次最好不要使用中文啊,血淋淋的教训,这个学编程英语国家真的好友优势,唉谁叫这东西是他们发明出来的呢,期待有一天计算机对于中文没有歧视

    问题原因:中文编码出现乱码

    问题解决:新建一个 JIRA 账号,账号名使用英文

  • bug2:第二次执行mvn clean deploy报错

    问题原因:这个错误很明显,由于项目中修改了一些代码,然后没有修改版本号,直接deploy代码到仓库,最终导致错误!

    问题解决:修改一下版本号,比如之前的版本号是 0.0.1,修改了代码之后我们在执行 mvn clean deploy 之前先将版本号修改为

    0.0.2 就OK了

参考文章

  • GPT3.5
  • 如何上传自己的jar包到maven中央仓库(2021最新版)_
  • 发布/上传Jar包到Maven中央仓库 - 史上最详细
  • 发布 JAR 包到 Maven 中央仓库 - 知乎 (zhihu.com)
  • Java上传本地jar包到maven中央仓库的坑逼经历
  • Caused by: com.sonatype.nexus.staging.client.StagingRuleFailuresException: Staging rules failure! 已解决!

在此致谢各位💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/931186.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SwiftUI 中限制任意视图为指定的屏幕旋转方向

功能需求 在 SwiftUI 开发中,我们有时需要限制 App 中某些视图为特定的屏幕旋转方向,而另一些视图不做限制(或做其它限制),这可以做到吗? 如上图所示:我们成功的限制了 SwiftUI 中不同视图对应于不同的屏幕旋转方向(Interface Orientations)。 在本篇博文中,您将学到…

OpenCV - C++实战(01) — OpenCV简介

目录 第1章 OpenCV简介 1.1 简介 1.1.1 OpencV 库简介 1.1.2 命名空间 1.2 OpenCV模块 1.3 装载、显示和存储图像 1.3.1 创建图像 1.3.2 读取图像 1.3.3 定义窗口与显示图像 1.3.4 图像翻转 1.3.5 保存图像 1.3.6 图像的复制 1.3.7 创建数组和向量 1.…

01、前端使用 thymeleaf 后,视图页面找不到---Cannot resolve MVC View ‘xxxxx前端页面‘

Cannot resolve MVC View ‘xxxxx前端页面’ 没有找到对应的mvc的前端页面。 代码&#xff1a;前端这里引入了 thymeleaf 模板 解决&#xff1a; 需要添加 thymeleaf 的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>s…

APP调用bindService的跨进程调用过程

app执行bindService时会经过如下8次跨系统进程调用过程&#xff1a; 第1步&#xff1a;通过AMS.getService跨进程调用 第2步&#xff1a;AMS返回它的IBinder 第3步&#xff1a;通过AMS的IBinder调用AMS的bindService方法 第4步&#xff1a;而AMS存放有Server端的IBinder&…

华为数通方向HCIP-DataCom H12-821题库(单选题:101-120)

第101题 可用于多种路由协议,由 ​​if-match​​​和 ​​apply​​子句组成的路由选择工具是 A、​​route-policy​​ B、​​IP-Prefix​​ C、​​commnityfilter​​ D、​​as-path-filter​​ 答案&#xff1a;A 解析&#xff1a; Route-policy&#xff08;路由策…

扫雷小游戏

目录 一.扫雷小游戏 二.游戏主体一览 ​编辑 三.模块化设计扫雷游戏 3.1打印欢迎菜单 3.2创建两个二维数组 3.3棋盘稍加修改 3.4布置雷 3.5排查雷 四.游戏总体代码 4.1game.h头文件 4.2game.c函数实现源文件 4.3游戏main函数主体 五.游戏效果图 一.扫雷小游戏 这是…

EB Tresos第一个项目报13026

EB项目创建 前期的准备工作见以上这篇文章&#xff0c;不做过多叙述&#xff1b;但是点击Generate Project会报错&#xff0c;报错如下&#xff1a; Code generator finished. Errors “1” Warnings “0” 然后点击 Problems View 查看提示&#xff0c;提示如下&#xff1a; …

大数据:AI大模型对数据分析领域的颠覆(文末送书)

随着数字化时代的到来&#xff0c;大数据已经成为了各行各业中不可或缺的资源。然而&#xff0c;有效地分析和利用大数据仍然是一个挑战。在这个背景下&#xff0c;OpenAI推出的Code Interpreter正在对数据分析领域进行颠覆性的影响。 如何颠覆数据分析领域&#xff1f;带着这…

为什么Python列表和字典前面会加星号(**)?

目录标题 前言一、列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;前面加星号*二、字典&#xff08;dict&#xff09;前面加两星号**尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! Python 中&#xff0c;单星号*和双星号**除了作为“乘”和“…

视频汇聚/云存储/安防监控AI视频智能分析平台——明厨亮灶解决方案

人工智能技术已经越来越多地融入到视频监控领域中&#xff0c;近期我们也发布了基于AI智能视频云存储/安防监控视频AI智能分析平台的众多新功能&#xff0c;该平台内置多种AI算法&#xff0c;可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍&#xff0c;支持人脸检测、…

算法 for GAMES

栈 #include <iostream> #include <stack>int main() {std::stack<int> intStack;// 压入元素到堆栈intStack.push(5);intStack.push(10);intStack.push(15);// 查看堆栈顶部元素std::cout << "Top element: " << intStack.top() <…

虚虚实实,让敌人难以琢磨

与敌作战&#xff0c;虚虚实实&#xff0c;难以琢磨 【安志强趣讲《孙子兵法》第20讲】 第六篇&#xff1a;虚实篇 【全篇趣讲白话】 打仗就是要虚虚实实&#xff0c;让敌人难以琢磨。 【原文】 孙子曰&#xff1a;凡先处战地而待敌者佚&#xff0c;后处战地而趋战者劳。故善…

Locked勒索病毒:最新变种locked袭击了您的计算机?

导言&#xff1a; 在数字时代&#xff0c;一场隐秘的威胁正悄然而至&#xff0c;它的名字是.locked勒索病毒。这个黑暗的存在以其狡猾的攻击方式和致命的数据封锁能力&#xff0c;威胁着我们的数字生活。本文91数据恢复将带您深入了解.locked勒索病毒的本质&#xff0c;探索恢…

【Day-20慢就是快】代码随想录-栈与队列-有效的括号

给定一个只包括 ‘(’&#xff0c;‘)’&#xff0c;‘{’&#xff0c;‘}’&#xff0c;‘[’&#xff0c;‘]’ 的字符串&#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被…

Redis7安装

1. 使用什么系统安装redis 由于企业里面做Redis开发&#xff0c;99%都是Linux版的运用和安装&#xff0c;几乎不会涉及到Windows版&#xff0c;上一步的讲解只是为了知识的完整性&#xff0c;Windows版不作为重点&#xff0c;同学可以下去自己玩&#xff0c;企业实战就认一个版…

会声会影2023全新中文专业版下载安装教程

熟练使用会声会影视频编辑工具&#xff0c;对视频创作过程的帮助是极大的。大家可以放心大胆地去研究会声会影的视频编辑技巧&#xff0c;会声会影2023与以往版本会声会影版本最大的区别是&#xff1a;账户制管理。可以通过账户添加或移除设备&#xff0c;非常便捷。该软件一直…

Vue2向Vue3过度Vuex核心概念mutations

目录 1 核心概念-mutations1.定义mutations2.格式说明3.组件中提交 mutations4.练习5.总结 2 带参数的 mutations1.目标&#xff1a;2.语法2.1 提供mutation函数&#xff08;带参数&#xff09;2.2 提交mutation 3 练习-mutations的减法功能1.步骤2.代码实现 4 练习-Vuex中的值…

05.Image Captioning with Semantic Attention

目录 前言泛读摘要Introduction创新/贡献点Related Work 精读输入的注意力模型输出的注意力模型模型学习视觉属性/概念预测实验MS-COCO的性能实验分析 Conclusion 代码略 前言 本课程来自深度之眼《多模态》训练营&#xff0c;部分截图来自课程视频。 文章标题&#xff1a;Ima…

多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比

多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比 目录 多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预测对比预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | Matlab实现BiLSTM-Adaboost和BiLSTM多变量时间序列预…

用AI + Milvus Cloud搭建着装搭配推荐系统教程

以下函数定义了如何将图像转换为向量并插入到 Milvus Cloud 向量数据库中。代码会循环遍历所有图像。(注意:如果需要开启 Milvus Cloud 全新特性动态 Schema,需要修改代码。) 查询向量数据库 以下代码演示了如何使用输入图像查询 Milvus Cloud 向量数据库,以检索和上传…