将Android Library项目发布到JitPack仓库

news2024/9/21 2:48:58
将项目代码导入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/repository
        mavenLocal()
//        // 其他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 也是可以配置多个的,如:release
    publications {
        // 任务名称:release  (名称可以随便定义)比如release表示发布正式包,debug表示snapshot包
        release(MavenPublication) {
            // 上传指定aar包的方式有两种
            // 依赖 bundleReleaseAar 任务,并上传其产出的aar
            afterEvaluate { 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查看构建状态:

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

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

相关文章

【Django】前端技术-网页样式表CSS

文章目录 一、申明规则CSS的导入方式行内样式内部样式外部样式 二、CSS的选择器1. 基本选择器标签选择器: 选择一类标签 标签{}类选择器 class: 选择所有class属性一致的表情,跨标签.类名{}ID选择器:全局唯一 #id名{} 2.层次选择器…

Element快速学习

博客主页:音符犹如代码系列专栏:JavaWeb关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 什么是Element? Element:它是由饿了么团队开发的一个…

cpp程序设计实践,类实现树链刨分以及计算几何类

程序设计要求 是某个cq高校期末程序设计实践作业,全部自己做的比较小众分值90。  试建立一个继承结构,以栈、队列为派生类,建立它们的抽象基类-Bag类,写出各个类的声明及定义,并实现如下功能:  统一命名…

华为高品质万兆园区体验保障技术白皮书

华为高品质万兆园区体验保障技术白皮书 - 华为企业业务 re 音视频会议已经成为企业办公的核心应用系统,尤其是高层会议的质量对企业的运营效率有很大影响,相 关的体验问题也是员工投诉的重灾区。但不同于传统的网络通断类问题,体验类问题涉及的范围大、…

高通QCC3081蓝牙芯片双CVC参数配置与优化指南

高通的QCC3081芯片搭载了领先的高通1-MIC、2-MIC、3-MIC CVC回声消除和噪声抑制技术,无论您身处何地,都能通过蓝牙立体声耳机或耳塞享受清晰的语音通话体验。无论是家中的生活噪音、街道的车流声还是人群的喧哗,这些背景噪声都不再是通话质量…

MATLAB基础:函数与函数控制语句

今天我们继续学习Matlab中函数相关知识。 API的查询和调用 help 命令是最基本的查询方法,可查询所有目录、指定目录、命令、函数。 我们直接点击帮助菜单即可查询所需的API函数。 lookfor 关键字用于搜索相关的命令和函数。 如,我们输入lookfor inpu…

vue-plugin-hiprint 打印 预览打印+静默打印

1.安装 npm install vue-plugin-hiprint npm i socket.io-client --save //为了静默打印 &#xff08;为此还需安装客户端&#xff09; 2…html页面 引入css <link rel"stylesheet" type"text/css" media"print" href"https://cdn.jsde…

MySQL高性能读写分离实战

介绍 我的上一篇文章实现了mysql的主从复制结构&#xff0c;今天这篇继续将如何实现读写分离。 读写分离是指&#xff1a;针对数据库的写操作&#xff08;插入、更新、删除等&#xff09;访问主数据库&#xff0c;读操作访问从数据库。 因为一般网站的读请求的数量是远远大于…

photoshop学习笔记——选区3 选区的变化

选区制作完成之后可以对选区进行变化 主要有&#xff1a; 反选&#xff1a;shift ctrl I 变换 修改&#xff1a; 边界 设置选区的边界大小 类似 CSS中的borderSize平滑 对选区的角进行平滑扩展 向外扩展选区收缩 向内收缩选区羽化 让边界变得过渡透明度 设置…

大数据学习之sparkstreaming

SparkStreaming idea中初步实现 Spark core: SparkContext 核心数据结构&#xff1a;RDD Spark sql: SparkSession 核心数据结构&#xff1a;DataFrame Spark streaming: StreamingContext 核心数据结构&#xff1a;DStream(底层封装了RDD)&#xff0c;遍历出其中的RDD即可进行…

docker 安装单机版redis

把这三个放上去 修改成自己的 按照自己需求来 照图片做 vim redis.conf vim startRedis.sh mv startRedis.sh deployRedis.sh sh deployRedis.sh docker run --privilegedtrue \ --name dev.redis --restartalways \ --network dev-net \ -v ./config/redis.conf:/etc/r…

Laravel:揭秘PHP世界中最优雅的艺术品

1. 引言 在PHP的世界里&#xff0c;框架如繁星般璀璨&#xff0c;但Laravel以其独特的魅力和优雅&#xff0c;成为了众多开发者心中的艺术品。本文将深入探讨Laravel为何能在众多PHP框架中脱颖而出&#xff0c;成为最优雅的选择。 1.1 Laravel的诞生背景 Laravel的诞生可以…

Windows Server搭建局域网NTP时间服务器与客户端通实现

1.服务器环境&#xff1a; win11更改注册表 winR输入regedit win11更改注册表 winR输入regedit 2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config&#xff0c;找到Config目录&#xff0c;双击Config目录下的AnnounceFlags&#xff0c;设为5。 3.HKEY_L…

学习大数据DAY25 Shell脚本的书写2与Shell工具的使用

目录 自定义函数 递归-自己调用自己 上机练习 12 Shell 工具 sort sed awk 上机练习 13 自定义函数 name(){ action; } function name { Action; } name 因为 shell 脚本是从上到下逐行运行&#xff0c;不会像其它语言一样先编译&#xff0c;所以函数必 须在调…

C++多态的底层原理

目录 1.虚函数表 &#xff08;1&#xff09;虚函数表指针 &#xff08;2&#xff09;虚函数表 2.虚函数表的继承--重写&#xff08;覆盖&#xff09;的原理 3.观察虚表的方法 &#xff08;1&#xff09;内存观察 &#xff08;2&#xff09;打印虚表 虚表的地址 函数 传参…

【无标题】Git(仓库,分支,分支冲突)

Git 一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更 一&#xff0e;Git的主要功能&#xff1a; 二&#xff0e;准备git机器 修改静态ip&#xff0c;主机名 三&#xff0e;git仓库的建立&#xff1a; 1.安装git [rootgit ~]# yum -y install git 2.创建一个…

postman请求响应加解密

部分接口&#xff0c;需要请求加密后&#xff0c;在发动到后端。同时后端返回的响应内容&#xff0c;也是经过了加密。此时&#xff0c;我们先和开发获取到对应的【密钥】&#xff0c;然后在postman的预执行、后执行加入js脚本对明文请求进行加密&#xff0c;然后在发送请求&am…

Android adb shell ps进程查找以及kill

Android adb shell ps进程查找以及kill 列出当前Android手机上运行的所有进程信息如PID等&#xff1a; adb shell ps 但是这样会列出一大堆进程信息&#xff0c;不便于定向查阅&#xff0c;可以使用关键词查找&#xff1a; adb shell "ps | grep 关键词" 关键词查…

AI视频生成(即梦)

1.打开即梦网页版 https://jimeng.jianying.com/ai-tool/home 2.图片生成-导入参考图&#xff08;这里原本的红色或者灰度图都是可以的&#xff09;-精细度5&#xff08;最高图质量越高&#xff09; 注&#xff1a;根据需要&#xff0c;选择不同的生图模型&#xff0c;具有…

【后端开发实习】Python基于Quart框架实现SSE数据传输

Python基于Quart框架实现SSE数据传输 前言SSE简介理论分析代码实现 前言 在类似Chatgpt的应用中要实现数据的流式传输&#xff0c;模仿实现打字机效果&#xff0c;SSE是不二之选。传统的Flask框架不能满足异步处理的要求&#xff0c;没有异步处理就很难实现实时交互的需求&…