先说一下,为什么会有这篇文章?

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

二、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/

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

  • 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-plugin
classpath '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 artifacts
publishNonDefault 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.flavorName
builtBy bundleTask
name = 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/

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

  • 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插件:



    因此,在对应工程要发布的依赖Module添加如下配置
plugins {
// 1、添加 maven-publish
id 'maven-publish'
}
  • 添加 发布渠道包配置

    发布渠道依赖包的配置信息,主要是参考Android Developer Gradle-API-7.1 LibraryPublishing:



    在对应工程要发布的依赖Module添加如下配置
android {
// 2、默认渠道
defaultPublishConfig "productionRelease"
// 3、发布渠道配置
publishing {
// Publishes all build variants with "vendor" component
multipleVariants("vendor") {
// 只发布release包
includeBuildTypeValues("release")
includeFlavorDimensionAndValues("vendor", "production","sandbox")
}
}
} // 4、依赖包发布配置信息
afterEvaluate {
publishing {
publications {
allVariants(MavenPublication) {
// 发布后的依赖包按如下配置进行引用:com.github.AndroidAppCodeDemo:jitpack_MultiFlavorLibDemo:1.0.2
from components.vendor // 表示发布 release
groupId = 'com.github.AndroidAppCodeDemo' // 这个是依赖库的组 id
artifactId = '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.srcDirs
classifier '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-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

= THE END =

文章首发于公众号”CODING技术小馆“,如果文章对您有帮助,欢迎关注我的公众号。

一文详解 jitpack 多渠道maven库发布的更多相关文章

  1. 一文详解Hexo+Github小白建站

    作者:玩世不恭的Coder时间:2020-03-08说明:本文为原创文章,未经允许不可转载,转载前请联系作者 一文详解Hexo+Github小白建站 前言 GitHub是一个面向开源及私有软件项目的托 ...

  2. Oracle内存详解之 Library cache 库缓冲

    Oracle内存详解之 Library cache 库缓冲 2017年11月09日 11:38:39 阅读数:410更多 个人分类: 体系结构 Library cache是Shared pool的一部 ...

  3. 一文详解 Linux 系统常用监控工一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)具(top,htop,iotop,iftop)

    一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)     概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间 ...

  4. 搭建私有maven库发布及使用流程

    一:背景 Apache Maven是当Java技术栈前最流行的项目管理工具,它提供了一系列方便快捷的命令帮助程序员们进行Java工程的开发工作.Maven服务器位于美国,由于出国带宽和众多因素,在国内 ...

  5. 私有maven库发布及使用流程

    ## 私有maven库发布流程 ### 环境配置 - idea环境下,如果使用内置maven,需要手动生成settings.xml,并关联. - 操作如下 - 生成settings.xml 右键pom ...

  6. 一文详解 OpenGL ES 3.x 渲染管线

    OpenGL ES 构建的三维空间,其中的三维实体由许多的三角形拼接构成.如下图左侧所示的三维实体圆锥,其由许多三角形按照一定规律拼接构成.而组成圆锥的每一个三角形,其任意一个顶点由三维空间中 x.y ...

  7. 一文详解Redis键过期策略

    摘要:Redis采用的过期策略:惰性删除+定期删除. 本文分享自华为云社区<Redis键过期策略详解>,作者:JavaEdge. 1 设置带过期时间的 key # 时间复杂度:O(1),最 ...

  8. 一文详解 WebSocket 网络协议

    WebSocket 协议运行在TCP协议之上,与Http协议同属于应用层网络数据传输协议.WebSocket相比于Http协议最大的特点是:允许服务端主动向客户端推送数据(从而解决Http 1.1协议 ...

  9. 1.3w字,一文详解死锁!

    死锁(Dead Lock)指的是两个或两个以上的运算单元(进程.线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁. 1.死锁演示 死锁的形成分为两个方面,一个是使用 ...

  10. 一文详解 Linux Crontab 调度任务

    最近接到这样一个任务: 定期(每天.每月)向"特定服务器"传输"软件服务"的运营数据,因此这里涉及到一个定时任务,计划使用Python语言添加Crontab依赖 ...

随机推荐

  1. Oracle 一对多将多行数据整理为一行

    在开发中一对多的关系经常用到,昨天遇到一个客户问题,要求将所有反馈任务的信息整理为一行展示并导出excel. 我数据库对应关系:通任务task对应feedback表多个反馈,也就是说每个任务都有很多条 ...

  2. Referenced file contains errors (http://mybatis.org/dtd/mybatis-3-config.dtd). For more information, right click on the message in the Problems View and select "Show Details..."

    mybatis配置文件报错Referenced file contains errors mybatis的配置文件报错 The errors below were detected when vali ...

  3. day27-过滤器Filter02

    Filter过滤器02 5.Filter过滤器生命周期 Filter生命周期图解 验证-Tomcat来创建Filter实例,只会创建一个实例 package com.filter; import ja ...

  4. Java中将 int[] 数组 转换为 List(ArrayList)

    前言 说起数组转换成 ArrayList,很多同学第一反应就是遍历数组,将元素逐个添加到 ArrayList 中,但是这个看着就lower,一般不会这么答. 所以马上就会想到Arrays工具类的 as ...

  5. elasticsearch global 、 filters 和 cardinality 聚合

    目录 1. 背景 2.解释 1.global 2.filters 3.cardinality 3.需求 4.前置条件 4.1 创建mapping 4.2 准备数据 5.实现3的需求 5.1 dsl 5 ...

  6. LeetCode HOT 100:子集(简单易懂的回溯)

    题目:78. 子集 题目描述: 给你一个整数数组,数组中元素互不相同.返回数组中所有可能的子集,且子集不能重复! 什么是子集?举个例子:原数组[1, 2, 3],[].[1].[1, 2].[1, 3 ...

  7. Docker 搭建 Wordpress 个人博客

    Docker安装 更新软件库(可选),将所用到的yum软件更新到最新 yum -y update docker一键安装命令: curl -fsSL https://get.docker.com | b ...

  8. ArcGIS工具 - 统计要素数量

    查询和统计是GIS中的重要功能之一.在ArcGIS中可以按属性信息.按空间位置关系进行查询和统计.今天为源GIS给大家分享使用ArcPy编程实现批量统计地理数据库要素类记录数量. 软件应用 统计单个图 ...

  9. 企业应用架构研究系列二十四:SQL Server 数据库调优之XEvent 探查器

    如果入职一些中小型公司,往往需要接手一些很"坑"的项目,到底多坑就不牢骚了,只讲一下,如果破解这些历史遗留的项目问题.项目代码可能短时间无法进行通读研究,我们就需要从底层数据库进行 ...

  10. 案例:用ajax get方法 查询用户列表

    html文件   <body> <div id="d1"></div> <button onclick="getlist()&q ...