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

将Android Library项目发布到JitPack仓库

将项目代码导入Github

1.将本地项目目录初始化为 Git 仓库。 默认情况下,初始分支称为 main;

如果使用 Git 2.28.0 或更高版本,则可以使用 -b 设置默认分支的名称。

git init -b main

如果使用 Git 2.27.1 或更低版本,则可以使用 git symbolic-ref 设置默认分支的名称。

git init && git symbolic-ref HEAD refs/heads/main 

2.在新的本地仓库中添加文件。 这会暂存它们用于第一次提交。

$ git add .

# Adds the files in the local repository and stages them for commit. 若要取消暂存文件,请使用“git reset HEAD YOUR-FILE”。

3.提交暂存在本地仓库中的文件。

$ git commit -m "First commit"

# Commits the tracked changes and prepares them to be pushed to a remote repository. 要删除此提交并修改文件,请使用 'git reset --soft HEAD~1' 并再次提交和添加文件。

4.在 GitHub.com 上创建一个新存储库。 为避免错误,请勿使用 README、许可或 gitignore 文件初始化新存储库。 您可以在项目推送到 GitHub 之后添加这些文件。

5.在存储库主页,单击Code 复制远程存储库URL,这里我们使用SSH URL。

使用SSH进行连接,需要新增 SSH 密钥到 GitHub 帐户,如果已存在可跳过。

添加方法参考下面这个连接

https://docs.github.com/zh/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases

 6.本地仓库中添加远程存储库的 URL(将在其中推送本地存储库),请运行以下命令。 将 REMOTE-URL 替换为 前面复制的完整URL。

git remote add origin REMOTE-URL 

要验证远程 URL 设置是否正确,请运行以下命令。

git remote -v

origin git@github.com:cncomer/okpermission.git (fetch)

origin git@github.com:cncomer/okpermission.git (push)

7.添加maven-publish插件

要在JitPack.io上构建Android库,我们还需要在build.gradle文件中添加maven-publish插件,下面是可供参考的相关配置和说明。

plugins {id 'com.android.library'//添加maven-publish插件id 'maven-publish'
}// 在maven-publish插件的基础使用中是不包含上传aar包的源码。
// 增加上传源码的task,如:
tasks.register("sourceJar", Jar) {// 通过 android.sourceSets.main.java.srcDirs 指定的源码,只能识别到 Java 文件,而 kt 文件被忽略了,但 通过查看官方文档可以知道,from 函数是可以指定源码路径的,// 所以这里直接把 from 函数的参数替换为 源码路径,如以下代码from android.sourceSets.main.java.getSrcDirs() // 源码路径archiveClassifier = "sources"
}//publishing用于配置项目发布相关信息,可以配置的信息有两个:repositories 和 publications
publishing {// 配置maven 仓库repositories {// 本地仓库位于USER_HOME/.m2/repositorymavenLocal()
//        // 其他maven仓库
//        maven { url uri('/Users/h__d/Desktop/1') }
//        // aliyun镜像仓库
//        maven {
//            // 凭证 访问仓库的 账号和密码
//            credentials {
//                username 'username' // 仓库发布用户名
//                password 'password' // 仓库发布用户密码
//            }
//            // 仓库地址
//            url 'https://maven.aliyun.com/nexus/content/groups/public/'
//        }}// 配置需要发布的jar的信息,即aar包的信息。publications是一个容器,类型是 PublicationContainer,其可以配置的信息类型是MavenPublication,可以理解成是一个列表集合,// 而集合中存储的对象是 MavenPublication,而对象的名称可以由自己随便定义。 所以 publications 也是可以配置多个的,如:releasepublications {// 任务名称:release  (名称可以随便定义)比如release表示发布正式包,debug表示snapshot包release(MavenPublication) {// 上传指定aar包的方式有两种// 依赖 bundleReleaseAar 任务,并上传其产出的aarafterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) } // 方式一:生成aar包// artifact "$buildDir/outputs/aar/${project.name}-release.aar" // 方式二:指定生成的aar路径groupId = "com.github.cncomer"artifactId = "okpermission"version = "1.0.0"artifact sourceJar// 依赖传递// 经过基础与上传源码后,是能正常依赖与使用的,但是aar包原本依赖的一下第三方包是不会自动依赖,需要手动添加依赖。// 把library中的依赖信息,手动添加到 pom 文件中,就可以完成依赖传递,如下:// pom文件中声明依赖,从而传递到使用方,注意需要--no-configuration-cache选项pom.withXml {def dependenciesNode = asNode().appendNode('dependencies')configurations.implementation.allDependencies.each {// 避免出现空节点或 artifactId=unspecified 的节点if (it.group != null && (it.name != null && "unspecified" != it.name) && it.version != null) {println "dependency=${it.toString()}"def dependencyNode = dependenciesNode.appendNode('dependency')dependencyNode.appendNode('groupId', it.group)dependencyNode.appendNode('artifactId', it.name)dependencyNode.appendNode('version', it.version)dependencyNode.appendNode('scope', 'implementation')}}}}}
}

执行下面的任务检查库是否能安装到mavenLocal($HOME/.m2/repository)

./gradlew publishToMavenLocal

// or if you named your publication "release"

./gradlew publishReleasePublicationToMavenLocal

执行成功后会输出BUILD SUCCESSFUL。

在USER_HOME.m2/repository下生成了软件包文件。

 8.添加jitpack.yml配置文件

JitPack.io默认的构建环境是java8,如果我们的项目使用的gradle插件版本8.5.0,需要Java17,就需要在根项目创建jitpack.yml文件,指定Java版本。

参考Building :: Documentation for JitPack.io

//jitpack.yml

jdk:

  - openjdk17

如果需要一个指定的版本,可以输入以下内容:

//jitpack.yml

before_install:

   - sdk install java 11.0.10-open

   - sdk use java 11.0.10-open

否则可能在JitPack上看到编译错误

 或者

这些编译错误都是Gradle插件所需的java版本高于编译环境的java版本导致的。我们可以从Android Studio设置里查看gradle使用的java版本。 

 

9.将本地存储库推送到 GitHub.com,请运行以下命令。

git push -u origin main

如果默认分支并非名为“main”,请将“main”替换为默认分支的名称。

-u 的作用是将本地的分支与远程的对应分支关联起来,‌这样在后续的操作中,可以直接使用 git push 或 git pull 命令来同步这两个分支,‌而无需每次都指定远程仓库名和分支名。‌

 此时可能会报错,比如

如果前面在Github上创建存储库的时候选择了创建README、.gitignore,就会碰到这个问题。

大概意思就是需要先pull更新一下,然而git pull origin main的时候又提示 

git pull fatal: refusing to merge unrelated histories

这个错误发生在尝试使用git pull命令合并两个独立的git仓库时。Git拒绝合并没有共同祖先的两个分支的历史记录,因为这样的合并可能会导致数据丢失。自Git 2.9版本以后,默认情况下,如果尝试合并两个没有共同历史的分支,Git会拒绝进行合并,并提示这是一个“unrelated histories”错误。 

解决方法:

你可以使用--allow-unrelated-histories选项来允许这样的合并操作。执行以下命令:

git pull --allow-unrelated-histories 

这将允许Git合并两个独立的历史,进行不带控制的合并。如果你确信这两个仓库之间的合并是有意为之,这样做是安全的。如果不确定,你可能需要仔细检查合并的结果,确保没有丢失重要的更改。

$ git pull --allow-unrelated-histories origin main

From github.com:cncomer/okpermission

 * branch            main       -> FETCH_HEAD

CONFLICT (add/add): Merge conflict in .gitignore

Auto-merging .gitignore

Automatic merge failed; fix conflicts and then commit the result.

提示有冲突,解决后commit,然后再git push -u origin main,正常提交到了Github。 

Github上创建存储库的发行版

在存储库主页右边的Release处会显示当前项目的最新发行版信息,我们现在还没有,所以点击Create a new release来创建一个。

这里要注意下,发行版需要基于某个tag, 如果没有必须先创建一个,否则没法下一步。

本地仓库中添加一个名为1.0.0的tag

git tag 1.0.0

接着将tag推送到Github

git push origin 1.0.0 

我们回到创建发行版编辑界面,可以选择我们刚才创建的tag,来创建对应的发行版,创建完成后该发行版会自动在JitPack执行构建,并发布到JitPack仓库。 

 

添加JitPack仓库依赖

在JitPack.io输入Git repo url,点击Look up检索。

如果Log下面对应的图标是绿色的,就代表库项目构建成功了,可以作为依赖项使用了。

点击Get it, 就会看到添加依赖的方法。

Step 1. 在根项目settings.gradle文件中添加JitPack仓库,一般添加在repositories末尾。

dependencyResolutionManagement {repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)repositories {//其他仓库//JitPack仓库maven { url 'https://jitpack.io' }}
}

Step 2. 在项目build.gradle中添加依赖。

dependencies {implementation 'com.github.cncomer:okpermission:1.0.0'
}

 点击Log查看构建状态:

相关文章:

将Android Library项目发布到JitPack仓库

将项目代码导入Github 1.将本地项目目录初始化为 Git 仓库。 默认情况下,初始分支称为 main; 如果使用 Git 2.28.0 或更高版本,则可以使用 -b 设置默认分支的名称。 git init -b main 如果使用 Git 2.27.1 或更低版本,则可以使用 git symbo…...

JAVAWeb实战(后端篇)

因为前后端代码内容过多,这篇只写后端的代码,前端的在另一篇写 项目实战一: 1.创建数据库,表等数据 创建数据库 create database schedule_system 创建表,并添加内容 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------…...

【vs】实用调试技巧——学会写优秀的代码!

🦄个人主页:小米里的大麦-CSDN博客 🎏所属专栏:https://blog.csdn.net/huangcancan666/category_12718530.html ⚙️操作环境:Visual Studio 2022 目录 一、前言 二、什么是BUG? 三、调试是什么?有多重要? 一名优秀…...

数组声明方式

数组声明方式 一、 一维数组 元素数据类型[] 数组名; // 推荐元素数据类型 数组名[]; 二、 二维数组 元素数据类型[][] 数组名称; // 推荐元素数据类型 数组名称[][];元素数据类型[] 数组名称[]; 注: 对于第三种方式元素数据类型[] 数组名称[];,可…...

Docker中Docker网络-理解Docker0与自定义网络的使用示例

场景 CentOS7中Docker的安装与配置: CentOS7中Docker的安装与配置_centos docker sock-CSDN博客 在上面安装好Docker之后。 关于对Docker中默认docker0以及自定义网络的使用进行学习。 注: 博客:霸道流氓气质-CSDN博客 实现 理解dock…...

领域驱动大型结构之SYSTEM METAPHOR(系统隐喻)

在领域驱动设计(Domain-Driven Design, DDD)中,"System Metaphor" 是一种用于帮助开发团队和业务人员在理解和沟通系统时使用的概念模型。虽然 "System Metaphor" 并不是 DDD 的核心概念,但它在敏捷开发方法&…...

web前端开发一、VScode环境搭建

1、VScode安装live server插件,写完代码后,保存就会在浏览器自动更新,不需要再去浏览器点击刷新了 2、创建html文件 3、在文件中输入感叹号 ! 4、选择第一个,然后回车,就会自动输入html的标准程序 5、…...

DiAD代码use_checkpoint

目录 1、梯度检查点理解2、 torch.utils.checkpoint.checkpoint函数 1、梯度检查点理解 梯度检查点(Gradient Checkpointing)是一种深度学习优化技术,它的目的是减少在神经网络训练过程中的内存占用。在训练深度学习模型时,我们需…...

nginx出现Refused to apply inline style because it violates

Content Security Policy的错误。根据错误提示,nginx拒绝应用内联样式,因为它违反了内容安全策略(Content Security Policy)。内容安全策略是一种浏览器机制,用于防止潜在的安全漏洞,通过限制从外部来源加载…...

【中项第三版】系统集成项目管理工程师 | 第 11 章 规划过程组⑥ | 11.15 - 11.17

前言 第11章对应的内容选择题和案例分析都会进行考查,这一章节属于10大管理的内容,学习要以教材为准。本章上午题分值预计在15分。 目录 11.15 规划资源管理 11.15.1 主要输入 11.15.2 主要工具与技术 11.15.3 主要输出 11.16 估算活动资源 11.1…...

基础警务互联网app

智慧公安以大数据、云计算、人工智能、物联网和移动互联网技术为支撑,以“打、防、管、控”为目的,综合研判为核心,共享信息数据资源,融合业务功能,构建公安智慧大数据平台,实现公安信息数字化、网络化和智…...

为了方便写CURD代码,我在UTools写了个插件SqlConvert来生成代码!

-1. 前言 为了方便摸鱼,我之前写过一个通过sql生成代码的工具,但是服务器到期了,也就懒得重新部署了。 技术框架是 SpringBoot MybatisPlus Velocity Vue ElementUI Sql-ParseeSql-Parser-ui 0. Utools应用安装 官网地址: https://u.too…...

在国产芯片上实现YOLOv5/v8图像AI识别-【2.2】RK3588上C++开发环境准备及测试更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 板子…...

2024数据资产入表财务实操手册

关注公众号《方案驿站》,并私信:2024数据资产入表财务实操手册,可获取本文pdf文件。...

react.16+

1、函数式组件 在vite脚手架中执行&#xff1a; app.jsx: import { useState } from react import reactLogo from ./assets/react.svg import viteLogo from /vite.svg import ./App.cssfunction App() {console.log(this)return <h2>我是函数式组件</h2> }exp…...

如何实现MySQL对某一张表的binlog日志进行记录

在 MySQL 中&#xff0c;使用触发器&#xff08;Triggers&#xff09;来记录表的变更是一种常见的方法。下面是具体的配置和步骤&#xff1a; 1. 创建日志表 首先&#xff0c;需要创建一个日志表&#xff0c;用于存储变更记录。 CREATE TABLE my_table_log (id INT AUTO_INC…...

使用requests库进行网络爬虫:入门指南

在数据收集与分析的广阔领域中&#xff0c;网络爬虫是一项基础而强大的技能。requests库是Python中用于发送HTTP请求的第三方库&#xff0c;它简洁易用&#xff0c;非常适合初学者学习网络爬虫。本文将带你一步步了解如何使用requests库进行基本的网络爬虫操作。 一、安装requ…...

实验5-1 使用函数计算两点间的距离

本题要求实现一个函数&#xff0c;对给定平面任意两点坐标(x1,y1)和(x2,y2)&#xff0c;求这两点之间的距离。 函数接口定义&#xff1a; double dist( double x1, double y1, double x2, double y2 );其中用户传入的参数为平面上两个点的坐标(x1, y1)和(x2, y2)&#xff0c;函…...

免费!OpenAI发布最新模型GPT-4o mini,取代GPT-3.5,GPT-3.5退出历史舞台?

有个小伙伴问我&#xff0c;GPT-4O mini是什么&#xff0c;当时我还一脸懵逼&#xff0c;便做了一波猜测&#xff1a; 我猜测哈&#xff0c;这个可能是ChatGPT4o的前提下&#xff0c;只支持文本功能的版本&#xff0c;速度更快 结果&#xff0c;大错特错。 让我们一起看看Open…...

目标检测损失计算部分(YOLO)

ComputeLoss 标准化坐标的增益张量 标准化坐标的增益张量&#xff08;gain tensor&#xff09;用于将归一化的目标转换为特定特征层的网格尺度&#xff0c;以便进行匹配和计算。 在目标检测模型中&#xff0c;输入图像被划分为多个网格&#xff0c;每个网格负责预测多个锚框…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...