当前位置: 首页 > news >正文

享受简单上传体验:将Maven仓库迁移到GitHub

前言:我为什么放弃了Maven Central

之前我写过一篇《Android手把手,发布开源组件至 MavenCentral仓库》,文中详细介绍了如何发布组件到Maven Central中供所有开发者共用。但是最近使用下来,发现Sonatype JIRA 的Maven Center上传太麻烦了!

首先,在使用Maven Central上传构建结果时,需要通过Sonatype JIRA系统进行一系列的操作和申请,这包括申请JIRA账户、申请OSSRH仓库访问权限、签署Maven Central Repository服务条款等。这些过程相对繁琐和不直观,需要较高的技术水平和耐心。

其次,按照 官方的说法 ,在Maven Central上发布后的组件会在 30 分钟内同步到中央仓库,但搜索功能需要达到 4 个小时。这也是不太能忍受的。

  1. 管理权限:Maven Central需要开发者进行身份验证和授权才能上传构建结果,而使用GitHub作为Maven仓库,开发者可以更容易地管理上传权限。

  2. 上传流程:使用Maven Central上传构建结果需要开发者按照一定的规范命名文件、签名文件、验证文件等。而使用GitHub作为Maven仓库,上传构建结果更加简便和灵活,只需要将构建结果推送到指定的分支即可。

因此,如果您希望使用更加便利和灵活的方式来管理自己的Maven仓库,并且不愿意面对Maven Central上传的繁琐流程,使用GitHub作为Maven仓库是一个不错的选择。我们可以利用GitHub Pages来创建自己的Maven仓库。以下是详细步骤:

1、创建一个新的GitHub仓库

在GitHub上创建一个新的仓库。该仓库将用于存放您的Maven仓库。您可以将其命名为maven-repository或其他您喜欢的名称。

image-20230426171039018

2、克隆仓库

将新创建的仓库克隆到本地计算机上:

git clone https://github.com/your-username/maven-repository.git

3、在克隆的仓库中创建gh-pages分支

cd maven-repository
git checkout --orphan gh-pages
git rm -rf .

gh-pages分支的名字不能更改,必须是这个分支名。gh-pages分支是GitHub中特殊的一个分支,它与GitHub Pages服务相关。GitHub Pages是一项允许您托管静态网站和文档的免费服务。它为您的项目、个人或组织提供了一个简单的方式来托管静态内容,如项目文档、博客、个人简历等。gh-pages`分支的主要特点和用途如下:

  1. 分支名称:默认情况下,GitHub Pages会自动检测名为gh-pages的分支。如果在仓库中存在这个分支,GitHub将使用这个分支上的内容为您的项目生成静态网站。

  2. 独立于主分支gh-pages分支独立于项目的主分支(通常是mastermain分支),这意味着您可以将静态网站内容与项目源代码分开,使项目结构更清晰。

  3. 自动生成网站:当您将更改推送到gh-pages分支时,GitHub会自动为您生成和发布静态网站。您无需设置任何额外的服务器或配置。GitHub Pages还支持Jekyll,这是一个静态网站生成器,可以自动将Markdown文件转换为HTML,并根据模板和样式构建网站。

  4. 支持自定义域名:GitHub Pages允许您为托管的静态网站设置自定义域名。您可以将自己的域名与GitHub Pages网站关联,为您的项目提供一个易于访问的URL。

4、在安卓项目的build.gradle文件添加配置

apply plugin: 'maven'uploadArchives {repositories {mavenDeployer {repository(url: "file:///path/to/your/local/maven-repository")pom.groupId = 'com.example'pom.artifactId = 'mylibrary'pom.version = '1.0.0'}}
}

请将 repository(url: "file:///path/to/your/local/maven-repository")这一段代码中的/path/to/your/local/maven-repository``替换为本地克隆的maven-repository`的实际路径。

同时,根据您的项目情况,修改pom.groupIdpom.artifactIdpom.version

5、将项目部署到本地Maven仓库

在您的安卓项目中运行以下命令:

./gradlew uploadArchives

该步骤亦可用侧面板搞定(记得点大象按钮:Sync Project With Gradle Files):

image-20230426173708734

6、将本地Maven仓库推送到GitHub

将新部署的库推送到GitHub仓库:

cd /path/to/your/local/maven-repository
git add .
git commit -m "Deploy new library version"
git push origin gh-pages

7、在其他项目中使用新部署的库

现在,您的库已经托管在GitHub Pages上。要在其他项目中使用它,只需将以下内容添加到项目的build.gradle文件中:

repositories {maven {url 'https://your-username.github.io/maven-repository/'}
}dependencies {implementation 'com.example:mylibrary:1.0.0'
}

请将your-username替换为您的GitHub用户名。

现在,您已成功在GitHub上创建了自己的Maven仓库,并可以在其他项目中使用托管的库。

总结

相比Maven Center,采用github作为maven仓库的方式更加快捷便利,方便管理。可以master分支管理代码,gh-pages分支管理仓库,互不干扰且修改sdk发布组件时一站式搞定。

缺点是这种方式需要在repositories添加引用的地址:

repositories {maven {url 'https://your-username.github.io/maven-repository/'}
}

如果您是个人开发者或者一般项目维护者,非常推荐用这种方式。

相关文章:

享受简单上传体验:将Maven仓库迁移到GitHub

前言:我为什么放弃了Maven Central 之前我写过一篇《Android手把手,发布开源组件至 MavenCentral仓库》,文中详细介绍了如何发布组件到Maven Central中供所有开发者共用。但是最近使用下来,发现Sonatype JIRA 的Maven Center上传…...

R语言 | 进阶字符串的处理

目录 一、语句的分割 二、修改字符串的大小写 三、unique()函数的使用 四、字符串的连接 4.1 使用paste()函数常见的失败案例1 4.2 使用paste()函数常见的失败案例2 4.3 字符串的成功连接与collapse参数 4.4 再谈paste()函数 4.5 扑克牌向量有趣的应用 五、字符串数据的…...

【MySQL高级】——InnoDB索引MyISAM索引

一、索引概述 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。 这些数据结构以某种方式指向…...

电影《灌篮高手》观后

上周和同学一起看了电影《灌篮高手》这部电影,个人以前没有看过相关漫画和动画,但记得,看过海报和一些宣传物品,有的衣服上,有文具盒上,也都出现过,而且是在自己小时候,可见当时的影…...

C# .Net 中的同步上下文

.Net 中的同步上下文 【文 / 张赐荣】 什么是同步上下文? 同步上下文(SynchronizationContext)是一个抽象类,它提供了一个基本的功能,用于在不同的同步模型中传播一个同步操作。 同步上下文表示一个代码执行的位置&a…...

3分钟入门:Flex 布局

flex 布局原理 全称 flexible box,弹性布局。 如何开启:为元素添加 display: flex。 开启 flex 布局的元素,称为 flex 容器(flex container),其子元素成为容器成员,称为 flex 项目。 flex 布…...

我想知道,就目前形势而言,学java好还是C++好?

前言 就现实点看看,可以对比现在Java和C的市场占有率,可以看到,到目前为止,Java在国内编程语言的市场仍然是占据着大头,在招聘当中Java的人数占有率仍然是遥遥领先于C,Java目前开阔的市场以及其巨大的岗位…...

Mysql 管理

目录 0 课程视频 1 系统数据库 -> 安装完mysql ->自带四个数据库 2 常用工具 -> 写脚本用 2.1 mysql 客户端工具 2.2 mysqladmin 2.3 mysqlbinlog -> 二进制日志 -> 运维讲解 2.4 mysqlshow 2.5 mysqldump 备份用 ->导出 2.6 mysqlimport/source -…...

C#基础(算术运算符)

作用 算术运算符 是用于 数值类型变量计算的运算符 它的返回结果是数值 赋值符号 // // 关键知识点: // 先看右侧 再看左侧 把右侧的值赋值给左侧的值 int myAge 18; 算术运算符 加 // 用自己计算 先算右侧结果 在赋值给左侧变量 int i 1; i i 2; …...

BM43-包含min函数的栈

题目 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。 此栈包含的方法有: push(value):将value压入栈中pop():弹出栈顶元素top():获取…...

[学习笔记] [机器学习] 3. KNN( K-近邻算法)及练习案例

视频链接数据集下载地址:《3. KNN及练习案例》配套数据集 1. K-近邻算法(KNN)概念 学习目标: 掌握K-近邻算法实现过程知道K-近邻算法的距离公式知道K-近邻算法的超参数 K K K值以及取值问题知道kd树实现搜索的过程应用KNeighborsClassifier实现分类知…...

React Hooks 钩子函数错误用法,你还在犯这些错误吗

React Hooks 常见错误 前言 本片文章主要是在写react hooks的时候,遇到的常见错误的写法,和错误。也是一个对只是的巩固和总结。 错误一 上代码:正确写法 function TestReactHooksError() {const [test, setTest] useState(test);useEff…...

tpm2-tools源码分析之tpm2_evictcontrol.c(1)

TPM 2.0中的tpm2_evictcontrol命令对应的源文件就是tpm2_evictcontrol.c,该文件位于tpm2-tools/tools/下,一共有339行(版本5.5)。 tpm2_evictcontrol的功能是使一个被加载的密钥持久保存、或者从TPM中移除一个持久密钥。命令描述…...

SpringCloud_OpenFeign服务调用和Resilience4J断路器

文章目录 一、负载均衡概论1、服务器负载均衡2、客户端负载均衡3、客户端负载均衡策略(SpringCloudRibbon)4、客户端负载均衡策略(SpringCloudLoadBalancer) 二、SpringCloudOpenFeign服务调用1、OpenFeign服务调用的使用2、OpenFeign服务调用的日志增强3、OpenFeign服务调用超…...

【C++】switch 语句

目录 1、缘起 2、笔记整理 3、if 和 switch 区别 4、总结 1、缘起 最近(2023-04-29)在 BiliBili 黑马程序员学习 C 编程语言,今天学习到了 switch 语句。以前在学习 C 语言 的时候,对这块知识点掌握的不是很好,…...

【Database-06】Centos 9 安装docker版的Oceanbase

1、安装docker 1.1、卸载旧版本 旧版本的 Docker 被称为docker或docker-engine。如果安装了这些,卸载它们以及相关的依赖项。 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotat…...

TiDB Operator 和 Operator Dashboard

TiDB Operator 和 Operator Dashboard V1TiDB Operator概念实现 Operator Dashboard概念实现 V2思路实例代码TiDB ARM OperatorTiDB ARM Operator Dashboard V1 为了演示如何编写 TiDB Operator 和 Operator Dashboard,我们将分别介绍它们的概念和实现。 TiDB Ope…...

计算机网络闲谈01——QUIC协议

计算机网络闲谈01——QUIC协议 预备知识 重传机制 RTT 一个连接的往返时间 RTO 重传超时时间 RTT和RTO 的关系是:由于网络波动的不确定性,每个RTT都是动态变化的,所以RTO也应随着RTT动态变化。 流量控制 对发送方发送速率的控制 称之为…...

楼层滚动效果(超级简单,易懂)

系列文章目录 文章目录 系列文章目录一、楼层滚动效果图如下1. 下图是纯Css实现的楼层滚动2.通过Js优化后的楼层滚动如下图(🌹🌹) 二、楼层滚动(Css实现)1.滚动原理2.代码如下 三、楼层滚动(JsCss优化后的楼层滚动&…...

FPGA、 CPU、GPU、ASIC区别

一、为什么使用 FPGA? 众所周知,通用处理器(CPU)的摩尔定律已入暮年,而机器学习和 Web 服务的规模却在指数级增长。 人们使用定制硬件来加速常见的计算任务,然而日新月异的行业又要求这些定制的硬件可被重新…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

uniapp 字符包含的相关方法

在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...