一文详解jitpack多渠道maven库发布

article/2025/9/21 0:26:16

先说一下,为什么会有这篇文章?
最初接触 JitPack 时,发现网络上大量涉及JitPack的教程不可用。通过两天的研究才搞明白:
1.不同的gradle版本,gradle api使用方式 与 JitPack配置方式均有所差异:使用JitPack发布Maven依赖库,其配置脚本与开发者使用的 gradle 版本是强相关的,因此不同的gradle版本,其API使用方式与 JitPack配置需做对应调整
2.官方案例不好使:JitPack的官方案例为 multi-flavor-lib-demo ,2018年最后一次更新,其使用的 gradle 版本相对较低,当前的gradle版本无法使用。
以上两点,可能是网络文章质量较低的主要原因,因此这里将我两天来的学习成果分享给朋友们,帮助大家节省一些时间。

Android应用开发过程中,开发者通常通过 gradle dependencies 导入第三方依赖库,那么当开发者的SDK中间件被其他项目依赖时,该如何发布自己的maven依赖库呢?
这里推荐一个Github的构建工具 https://jitpack.io/ 。

  • JitPack 简介
  • JitPack 使用及案例举例
  • 案例源码下载

一、JitPack简介

JitPack一 个构建与发布 Git 存储库的便捷服务可用于在 GitHub、GitLab 上打包、发布与部署依赖库便于使用者通过maven依赖的形式引用开发者发布的依赖库

jitpack

  • JitPack 允许开发者将 GitHub、GitLab上的JVMAndroid 项目发布到 Jitpack 的 Maven 仓库
  • JitPack 通过搜索开发者输入的git仓库链接地址的形式,自动查找Git上的工程代码,并进行自动打包、构建依赖库(对于开发者来说,基本实现了一键发布依赖库);
  • JitPack 允许开发者将 Git 存储库(包括存储库的任何一个分支分支的某一次commit提交)以不同版本的形式进行构建、发布为maven依赖库,便于开发者进行版本发布与维护;
  • 使用价格方面,对于开源项目 JitPack 是完全免费的
    https://jitpack.io/private#subscribe

二、JitPack 使用

配置jitpack需采用gradle API编写配置脚本,随着gradle版本的更新,相关API及使用方式也有了一定的变化。
这里分别基于 gradle 6.1gradle 7.5 举例 jitpack 多渠道发布。

  • gradle 6.1 配置 JitPack
  • gradle 7.5 配置 JitPack

2.1 gradle6.1配置JitPack

举例代码中使用的 gradle版本 与 插件版本 如下:
gradle版本: https://services.gradle.org/distributions/gradle-6.1.1-all.zip
插件版本com.android.tools.build:gradle:3.6.1

举例代码中 jitpack 编译结果:
https://javadoc.jitpack.io/com/github/AndroidAppCodeDemo/jitpack_MultiFlavorLibDemo/gradle_6_1-SNAPSHOT/
jitpack编译结果

下边通过以下两个方面进行详细说明:

  • gradle 6.1 使用 jitpack 进行多渠道 Maven 依赖库发布详细举例说明;
  • 如何引用 jitpack Maven发布的多渠道依赖库?

2.1.1 jitpack多渠道配置

gradle 6.1 使用 jitpack 进行多渠道 Maven 依赖库发布详细举例说明:
假定 要发布的库 其渠道配置信息如下:

// 渠道举例
flavorDimensions "vendor"
productFlavors {production {dimension "vendor"buildConfigField 'String', 'ENV', '"PRODUCTION"'}sandbox {dimension "vendor"buildConfigField 'String', 'ENV', '"SANDBOX"'}
}
  • 首先,需添加 android-maven-gradle-plugin插件:
    在Android工程根目录build.gradle中,添加 android-maven-gradle-plugin插件。
buildscript {dependencies {// 1、添加 android-maven-gradle-pluginclasspath 'com.github.dcendents:android-maven-gradle-plugin:1.5'}
}
  • 添加 发布渠道包配置
    按照如下代码举例,在对应Module工程build.gradle添加如下4步配置
// 2、应用插件
apply plugin: 'com.github.dcendents.android-maven'
android {// ...// 3、默认发布渠道defaultPublishConfig "productionRelease"// 4、true to publish all flavour artifactspublishNonDefault true
}
// 5、添加“发布多渠道依赖包配置”
if (android.productFlavors.size() > 0) {android.libraryVariants.all { variant ->if (variant.name.toLowerCase().contains("debug")) {return}def bundleTask = tasks["bundle${variant.name.capitalize()}Aar"]artifacts {archives(bundleTask.archivePath) {classifier variant.flavorNamebuiltBy bundleTaskname = project.name}}}
}

以上的5个步骤参考了 jitpack-io官方 multi-flavor-lib-demo 样例工程

2.1.2 引用 jitpack 发布的多渠道依赖库

在上一步中,我们顺利发布了 maven 依赖库,这里记录一下如何使用我们发布的依赖库?

  • 在Android工程根目录build.gradle添加 jitpack 仓库地址
allprojects {repositories {// 1、添加 jitpack 仓库地址maven { url 'https://jitpack.io' }}
} 
  • 在对应Android工程引用依赖包的Module添加如下依赖
dependencies {// 2、添加库文件依赖:// implementation "com.github.<USER>.<REPO>:<library-module>:<version>:<flavor-name>@aar"// production 渠道  implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_6_1-SNAPSHOT:production@aar' // sandbox 渠道  implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_6_1-SNAPSHOT:sandbox@aar' 
}

2.2 gradle7.5配置JitPack

举例代码中使用的 gradle版本 与 插件版本 如下:
gradle版本: https://services.gradle.org/distributions/gradle-7.5-bin.zip
插件版本com.android.tools.build:gradle:7.4.1

举例代码中 jitpack 编译结果:
https://javadoc.jitpack.io/com/github/AndroidAppCodeDemo/jitpack_MultiFlavorLibDemo/gradle_7_5-SNAPSHOT/
jitpack编译结果

下边通过以下两个方面进行详细说明:

  • gradle 7.5 使用 jitpack 进行多渠道 Maven 依赖库发布详细举例说明;
  • 如何引用 jitpack Maven发布的多渠道依赖库?

2.2.1 jitpack多渠道配置

gradle 7.5 使用 jitpack 进行多渠道 Maven 依赖库发布详细举例说明(假定 仍采用上一步案例中的渠道配置信息):

  • 应用 maven-publis 插件:
    根据 android developer:Maven Publish 中介绍,Android gradle 插件3.6以上版本可以应用 Maven Publish插件:
    android developer 使用 Maven Publish 插件
    因此,在对应工程要发布的依赖Module添加如下配置
plugins {// 1、添加 maven-publishid 'maven-publish'
}
  • 添加 发布渠道包配置
    发布渠道依赖包的配置信息,主要是参考Android Developer Gradle-API-7.1 LibraryPublishing:
    android developer gradle-api-7.1 LibraryPublishing
    在对应工程要发布的依赖Module添加如下配置
android {// 2、默认渠道defaultPublishConfig "productionRelease"// 3、发布渠道配置publishing {// Publishes all build variants with "vendor" componentmultipleVariants("vendor") {// 只发布release包includeBuildTypeValues("release")includeFlavorDimensionAndValues("vendor", "production","sandbox")}}
}// 4、依赖包发布配置信息
afterEvaluate {publishing {publications {allVariants(MavenPublication) {// 发布后的依赖包按如下配置进行引用:com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:1.0.2from components.vendor // 表示发布 releasegroupId = 'com.github.AndroidAppCodeDemo' // 这个是依赖库的组 idartifactId = 'jitpack_MultiFlavorLibDemo' // 依赖库的名称version = "1.0.2"     // 当前版本依赖库版本号}}repositories {maven {def baseUrl = buildDir.getParent()def releasesRepoUrl = "$baseUrl/repos/releases"def snapshotsRepoUrl = "$baseUrl/repos/snapshots"url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl}}}
}
// 5、生成source jar
task generateSourcesJar(type: Jar) {from android.sourceSets.main.java.srcDirsclassifier 'sources'
}

2.2.2 引用 jitpack 发布的多渠道依赖库

在上一步中,我们顺利发布了 maven 依赖库,这里记录一下如何使用我们发布的依赖库?

  • 在Android工程根目录build.gradle添加 jitpack 仓库地址
allprojects {repositories {// 1、添加 jitpack 仓库地址maven { url 'https://jitpack.io' }}
} 
  • 在对应Android工程引用依赖包的Module添加如下依赖
dependencies {// 2、添加库文件依赖:// implementation "com.github.<USER>.<REPO>:<library-module>:<version>:<flavor-name>@aar"// production 渠道  implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_7_5-SNAPSHOT:production@aar' // sandbox 渠道  implementation 'com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:gradle_7_5-SNAPSHOT:sandbox@aar' 
}

三、案例源码

本文所使用的案例工程 下载地址 如下:
https://download.csdn.net/download/aiwusheng/87473529

源码中包含两个案例,分别对应Gradle 6.1与Gradle 7.5两个版本:

  • jitpack_MultiFlavorLibDemo_gradle_6_1
  • jitpack_MultiFlavorLibDemo_gradle_7_5

jitpack_MultiFlavor_gradle61 与 gradle75

参考

jitpack-io官方multi-flavor-lib-demo:
https://github.com/jitpack-io/multi-flavor-lib-demo

jitpack-io官方jitpack-android-sample:
https://github.com/jitpack-io/jitpack-android-sample

android developer 使用 Maven Publish 插件:
https://developer.android.google.cn/studio/build/maven-publish-plugin?hl=zh-cn

android developer gradle-api-7.1:
https://developer.android.com/reference/tools/gradle-api/7.1/com/android/build/api/dsl/LibraryPublishing

android developer gradle-api-8.0:
https://developer.android.google.cn/reference/tools/gradle-api/8.0/com/android/build/api/dsl/LibraryPublishing

android developer 配置发布内容变体:
https://developer.android.google.cn/studio/publish-library/configure-pub-variants?hl=zh-cn

gradle docs publishing_maven:
https://docs.gradle.org/current/userguide/publishing_maven.html


http://chatgpt.dhexx.cn/article/vZgMqr4v.shtml

相关文章

【红黑树】二叉树的改进---红黑树|平衡二叉树和红黑树的区别

目录 二叉树的改进---红黑树 红黑树和AVL树&#xff08;平衡二叉树&#xff09;区别 确实是AVL&#xff08;平衡二叉树&#xff09;更严格&#xff08;左右子树树高不超过1&#xff09;, 红黑树只保证最长路径不超过最短路径的2倍 二叉树的改进---红黑树 这个是一个 小灰程序…

红黑树是怎么实现的,看这篇真的就够了!

大家好&#xff0c;我是鸭血粉丝&#xff0c;又是一个元气满满的周一&#xff0c;今天带大家一文搞懂红黑树&#xff0c;友情提示&#xff1a;本文较长&#xff0c;建议先收藏再观看。 红黑树由来&#xff1a;在1972年由Rudolf Bayer发明的&#xff0c;当时被称为平衡二叉B树&…

红黑树解读与Java实现

红黑树解读与Java实现 概要 目录 红黑树的介绍红黑树的应用红黑树的时间复杂度和相关证明红黑树的基本操作&#xff0c;左右旋红黑树的基本操作&#xff0c;添加与调整红黑树的基本操作&#xff0c;删除与调整 一、红黑树的介绍 什么是红黑树&#xff1f; R-B Tree&#…

JDK14的新特性:JFR,JMC和JFR事件流

文章目录 简介JFRJMC创建JFR分析JFR JFR事件JFR事件流总结 简介 Java Flight Recorder&#xff08;JFR&#xff09;是JVM的诊断和性能分析工具。它可以收集有关JVM以及在其上运行的Java应用程序的数据。JFR是集成到JVM中的&#xff0c;所以JFR对JVM的性能影响非常小&#xff0…

Cocos2d-x利用jni调用java层代码

jni的意思是java本地调用&#xff0c;通过jni可以实现java层代码和其他语言写得代码进行交互。在cocos2d-x中&#xff0c;如果想要在c层调用java层的代码&#xff0c;就是通过jni技术。通过调用java层的代码&#xff0c;我们就可以在Android平台下实现一些引擎没有提供给我们的…

红黑树,学习红黑树,jdk1.8之后的新知识

红黑二叉树 1.引言 HashMap的基本结构是数组&#xff0c;链表和红黑树。以数组为基本形态&#xff0c;数组中的元素先以链表形式储存&#xff0c;当链表的长度超过8时&#xff08;包含数组上的那个链表头&#xff09;就会将链表转换为红黑树&#xff0c;以加快修改和查询效率…

JavaScript 红黑树

一、树的平衡性 为了能以较快的时间O(logN)来操作一棵树,我们需要保证树总是平衡的: 至少大部分是平衡的,那么时间复杂度也是接近O(logN)的也就是说树中每个节点左边的子孙节点的个数应该尽可能的等于右边的子孙节点的个数.常见的平衡树有哪些呢?AVL树: AVL树是最早的一种平衡…

最详细的对红黑树性质理解

红黑树的性质&#xff1a; 在了解红黑树之前&#xff0c;建议先去了解一下什么是二叉搜索树。 因为红黑树属于二叉搜索树特殊的分支&#xff0c;所以建议先去了解一下二叉搜索树。 二叉搜索树&#xff1a;https://blog.csdn.net/Falling_stars_/article/details/115536511 红…

JDK1.8之后,HashMap转变红黑树

当链表长度大于8并且数组长度大于64时&#xff0c;才会转换为红黑树 根据源码注释&#xff1a; 1.TreeNodes占用空间是普通Nodes的两倍。 只有当bin&#xff08;bin就是bucket-桶&#xff0c;即HashMap中hashCode值一样的元素保存的地方&#xff09;包含足够多的节点时才会转成…

jdk1.8的HashMap中的红黑树插入,为什么是红黑树而不是AVL树

jdk1.8HashMap的源码 树节点 static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> {TreeNode<K,V> parent; // red-black tree linksTreeNode<K,V> left;TreeNode<K,V> right;TreeNode<K,V> prev; // needed to unli…

浅谈红黑树

这篇文章的删除操作参考这篇博客博客地址 聊红黑树之前我想先来谈谈B树&#xff08;多路平衡查找树&#xff09;&#xff0c;为什么来聊这个东西呢&#xff0c;其实红黑树就是一个B树。了解B树后对红黑树的理解会比较有帮助。 首先是2、3、4节点。 红黑树中单个黑节点对应B树中…

红黑树的理解与代码实现

红黑树 我们知道对于二叉搜索树而言&#xff0c;无法保证树的平衡性&#xff0c;从而使得进行操作的时候时间复杂度在O(logn)与O(n)之间。这样是不稳定的。而2-3树则借助于3-结点和临时的4-结点&#xff0c;通过分解&#xff0c;解决了平衡问题。例如对于插入&#xff0c;在最终…

图解TreeMap的红黑树平衡操作fixAfterInsertion(),接着手撕红黑树添加节点

一、前言 啥也不想说&#xff0c;就卷、卷技术&#xff1b;手撕红黑树搞起。 1、红黑树简介 红黑树就是一种平衡的二叉查找树&#xff0c;其有五个特点&#xff1a; 1.每个节点要么是红⾊&#xff0c;要么是⿊⾊&#xff1b; 2. 根节点⼀定是⿊⾊的&#xff1b; 3. 每个叶⼦…

有人在jdk源码里下毒【class.newInstance() bug复现】

如图 在用反射的时候&#xff0c;发现这个方法被idea划横杠了 稍加思索后发现是这方法从jdk9开始弃用了&#xff0c;倒不影响使用&#xff0c;对象还是能正常射出来&#xff0c;就是看着很难受 &#xff08;最近刚把本地开发机从8升到11&#xff0c;难怪&#xff09; 说下我…

红黑树理解以及Java实现

红黑树本身并不复杂&#xff0c;只是在插入删除的时候情况比较多&#xff0c;如果强行记忆的话会显得比较困难&#xff0c;而且容易忘记。所以以前对红黑树一直没有很好的掌握。恰好这次借着复习数据结构的机会&#xff0c;静下心来仔细的学习了一下红黑树&#xff0c;并用Java…

Java 9 vs Java 8:引入模块化和JShell的全面升级

Java 9 是 Java 语言的一个重大版本升级&#xff0c;带来了许多新的特性和改进。 在本篇博客中&#xff0c;我将为您介绍 Java 9 的一些重要特性。 &#x1f3c5; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; 目录 一、模块化二、JShell三…

HashMap 在 JDK 1.8 后新增的红黑树结构

读完本文你将了解到&#xff1a; 点击查看 Java 集合框架深入理解 系列 - - 乾杯传统 HashMap 的缺点HashMap 在 JDK 18 中新增的数据结构 红黑树HashMap 中关于红黑树的三个关键参数HashMap 在 JDK 18 中新增的操作桶的树形化 treeifyBinHashMap 在 JDK 18 中新增的操作 红黑树…

epoll底层红黑树使用部分源码剖析:为什么使用红黑树以及如何使用红黑树

我们知道epoll的底层使用了红黑树来管理文件描述符&#xff0c;为什么会选择红黑树这种结构呢&#xff1f; 以下是个人理解&#xff1a; epoll和poll的一个很大的区别在于&#xff0c;poll每次调用时都会存在一个将pollfd结构体数组中的每个结构体元素从用户态向内核态中的一…

HashMap在jdk1.8为何引入了红黑树?

原创不易,麻烦点个关注,点个赞,谢谢各位。 二叉查找树 二叉查找树,也称有序二叉树(ordered binary tree),或已排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若任…

从电路的角度理解特征阻抗

传输显得特征阻抗不是真实的电阻&#xff0c;微波技术课程会从波的角度描述特征阻抗&#xff0c;这次试图从电路的角度来理解 无损传输线是分布的L C 网络&#xff0c;假设是无限长传输线 从a,b两点看入的阻抗是相等的&#xff0c;所以可以简化成下图&#xff1a; 化简可得 这…