你会在 JitPack 上创建依赖库吗?

article/2025/9/20 23:59:10

为什么写

看见标题有人可能会轻蔑一笑,多简单个事?还至于专门写一篇文章吗?

我之前也以为挺简单的,因为之前自己也上传过,但是前几天的经历告诉我没有那么简单,特别是现在安卓 Gradle 升级到 7.0 之后。。。

还可能有人问为什么要在 JitPack 上创建呢?JCenterMaven 不香嘛?

因为我之前就在 JitPack 上创建过依赖,有点经验,所以选择这个,至于JCenter ,可能大家也知道,直接看官网吧:
JCenter
懂了吧。。。

为啥没选 Maven 呢。。。因为我没想到 JitPack 变得这么麻烦,本来是奔着简单才选的,如果再给我一次机会我一定不上传 JitPack 了。。。好了,废话不多说,直接进入文章主题吧:

流程

上传依赖到 JitPack 流程很简单,网上搜博客一搜一大堆,这里就不详细说了,我简单过一下吧:

创建 Android Library

首先要创建一个 Android Library ,这其实是废话,你要上传的就是依赖不创建 Android Library 创建啥?对不。。。然后在里面写好你需要作为依赖的代码,比如写一些工具类啊啥的,这个看自己的需要吧,就不做演示了。。。

上传到 Github

代码写完了就该上传到 Github 了。什么?你没有 Github 仓库?码云的也可以。什么?都没有?玩蛋去。。

这里就假设你有 Github 了,然后在 as 中登录一下,按照图片下面的操作直接添加你的账号就行了:
as github
添加完了之后按照下面图片中那样点击:
share github
点击完之后会弹出下面的对话框:
share
注意不要勾选 Private ,勾选了的话你上传的就成了私有的了。

Release

上传成功之后打开 Github 网页点击下面图片中箭头所指的地方开始打包:
github
点击完之后按照下面的格式填写信息:
release
第一个框是版本号,第二个框是标题,第三个框是描述,根据个人情况填写就行,填写完之后点击绿色按钮进行发布就行了。

JitPack 发布

这里就很简单了,打开 JitPack 官网:https://jitpack.io/
jitpack
这块有两个选择,通过右上角登录你的 Github 账号或者在搜索框搜索你刚才上传库的地址,都可以,自己选择,选择之后点击 Look up 会出现如下:
get it
点击 Get it 静静等待即可。

使用依赖

上面完成之后直接就可以使用了,现在工程级目录下的 build.gradle 中添加如下代码:

	allprojects {repositories {...maven { url 'https://jitpack.io' }}}

然后在你的 module 级目录下的 build.gradle 中添加如下代码:

	dependencies {implementation 'com.github.zhujiang521:Banner:Tag'}

其实这块网页中都写的有:
white

问题

本来不想写上面这一堆,但是感觉不写也不对,大家理解起来可能有困难,所以就写了下。

如果是在去年,上面的一套流程完全没有问题,但是在现在,上面的流程。。。不对。

AndroidMavenPlugin 的问题

为什么说不对呢?如果你现在按照上面的流程走的话,在 JitPack 发布那一块你肯定会失败,就是 Get it 失败,就像下面这样:
error
错了不要紧,看看日志错在哪了,点击那个小书的标签,进入日志,发现报错信息如下:

FAILURE: Build failed with an exception.* Where:
Script '/script/maven-plugin.gradle' line: 2* What went wrong:
A problem occurred evaluating script.
> Failed to apply plugin 'com.github.dcendents.android-maven'.> Could not create plugin of type 'AndroidMavenPlugin'.> Could not generate a decorated class for type AndroidMavenPlugin.> org/gradle/api/publication/maven/internal/MavenPomMetaInfoProvider

呃呃,这是啥?AndroidMavenPluginGoogle 了之后才知道 JitPack 使用的就是 AndroidMavenPlugin 来发布依赖的,OK,既然这个东西有问题,那就来看看怎么加上吧:

classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'

OK,再次提交代码,打 release 包,然后去 JiaPack 网站点 Get it ,发现依然报这个错。。。

什么鬼。。。

又去 Github 搜索了下 android-maven-gradle-plugin ,发现人家这个库已经废弃了。。。
abandones
上面废弃库指向的是安卓官方文档。。。这又是什么鬼。。。也没人告诉我啊!!!

过程有多艰难这里就不进行描述了,在下面我会简单说下。经过一番搜索,发现。。。发现我就是个憨批。。。使用 JitPack 不跟着人家官方文档来,跟什么别人的博客?其实大家以后也是,能看官方文档就别看三方写的东西,出错了都不知道为啥。。。来看下吧:
gradle
官方文档中清清楚楚、明明白白地写着需要配置Gradle插件我不配置偏偏要去百度上面出现的错误!!!真的是。。。憨批!

来吧,看下安卓的文档吧:https://developer.android.com/studio/build/maven-publish-plugin
develoger
详细内容大家去官网看吧,这里直接写下解决问题的代码吧:

plugins {id 'com.android.library'id 'kotlin-android'id 'maven-publish'
}afterEvaluate {publishing {publications {release(MavenPublication) {from components.releasegroupId = 'com.zj.banner'artifactId = 'banner'version = '1.0.0'}}}
}

OK,提交代码,打 release 包,然后再去 JiaPack 网站点 Get it ,大部分人应该就可以成功了,但是。。。我的还是不行的。。。

Java 11 的问题

为啥还是不行呢?不要紧,看看日志错在哪了,点击那个小书的标签,进入日志,发现报错信息如下:

FAILURE: Build failed with an exception.* Where:
Build file '/home/jitpack/build/app/build.gradle' line: 2* What went wrong:
An exception occurred applying plugin request [id: 'com.android.application']
> Failed to apply plugin 'com.android.internal.application'.> Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8.You can try some of the following options:- changing the IDE settings.- changing the JAVA_HOME environment variable.- changing `org.gradle.java.home` in `gradle.properties`.

嗯。。。这是什么情况?

其实上面也提到过,Android Gradle 在升级到 7.0 之后就必须使用 Java 11 以及之后的版本才可以,而我目前使用的是 Java 1.8。

嗯,既然需要 Java 11 那就升级下,改下 modulebuild.gradle 中的代码:

android {...compileOptions {sourceCompatibility = JavaVersion.VERSION_11targetCompatibility = JavaVersion.VERSION_11}kotlinOptions {jvmTarget = '11'useIR = true}
}

大家要注意,每次修改完代码都需要先把代码 pushGithub 中,然后重新按照上面的步骤打一个 release 包,再去 JitPack 网页中点击你打的包的那个版本的 Git it 才行。

提交完了之后执行,发现。。。竟然还在报错,报的还是这个错!这是什么玩意?

其实我在这块卡了很久,一直以为是我本地的代码问题,但后来想明白应该是 JitPack 的问题,因为本地运行是没有任何问题的。

想清楚这一点,我来到了 JitPackGithub 仓库,点开了仓库的 Issues ,直接搜索 Java 11,果然,找到了这个问题:
issues
上面的图片中有个 JitPack 的帮助文档,点击打开:
java
但之前其实还有个疑问,我在代码中国呢已经设置了 Java 的版本,为什么还是报错呢?看上面的图片大家应该也已经知道了,JitPack 默认使用的是 OpenJDK Java 8 编译项目,但是咱们需要 Java 11 ,你必须按照上面那样在根目录添加一个 jitpack.yml 文件才可以,OK,那就添加吧:

before_install:- sdk install java 11.0.10-open- sdk use java 11.0.10-openjdk:- openjdk11

再次提交代码,打 release 包,然后去 JiaPack 网站点 Get it ,发现依然报这个错。。。

我的天,我当时真的不知道该怎么搞,以为我 jitpack.yml 这个文件格式写的有问题 JitPack 识别不出来?还是别的什么问题?然后改来改去改了几十遍。。。为什么我知道是几十遍呢?下面是我的提交记录:
tag
这只是其中一部分,下面是我 Github 的一部分提交记录:
commit
看到上面的提交记录,你就应该能明白当时我的无助。。。。

索性不管了,明天再说吧。。。

然而,奇怪的事情发生了,第二天我再次使用相同版本进行 Get it 的时候,虽然还是失败,但是问题竟然变了!!!什么鬼?看下日志:

Kotlin:       1.4.31
Groovy:       3.0.7
Ant:          Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM:          11.0.2 (Oracle Corporation 11.0.2+9)
OS:           Linux 4.14.63-xxxx-std-ipv6-64 amd64

通过日志可以看到 Java 已经设置为了 11 ,我的天,昨天搞了一天这玩意没成功,其实已经成功了,我估计是 JitPack 中有缓存。。。害死我了。。。

OK,再次提交代码,打 release 包,然后去 JiaPack 网站点 Get it ,然后就是漫长的等待。。。

终于, Git it 按钮变为了绿色,成功了。。。

总结

没什么好总结的,因为感觉自己脑子不够用,遇到问题首先想到的一直是复制错误去百度、去 Google ,从来没想着去最权威的东西——官方文档,老想着别人可能也遇到过这个问题,直接去拿现成的,这是个不好的习惯,得改。

希望大家能以此为戒,努力,共勉。


http://chatgpt.dhexx.cn/article/83vgvsJ2.shtml

相关文章

Jitpack使用指南:maven-publish如虎,jitpack如翼 【安卓Java组件化模块化】【更多gradle技巧】

上文总结了三种多模块开发的方法。 第一种:在setting.gradle中定义子模块然后 api Project(:...),直接引用 。第二种,使用 maven-publish 部署至本地仓库第三种,使用 jitpack.io 等部署至远程服务器 我的第一个开源项目就依次用…

使用jitpack发布你自己的依赖库

如何优雅的让其他开发者使用我们的库。 我们经常通过gradle导入第三方库,那么我们自己的库如何提供给其他开发者使用?下边我们分别介绍使用jitpack、mavenCentral(以前叫JCenter)来发布我们的库。 在使用前,我们先了解…

JitPack的使用

JitPack的使用 1 JitPack简介2 JitPack使用1 上传代码到仓库,并创建一个release2 进入JitPack官网首页,输入仓库地址,点击Look up3 点击Get it按钮,下面生成maven仓库和依赖4 在项目的pom文件中添加上面两个依赖 3 总结 JitPack官网 官网文档 参考资料: https://blog.csdn.n…

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

先说一下,为什么会有这篇文章? 最初接触 JitPack 时,发现网络上大量涉及JitPack的教程不可用。通过两天的研究才搞明白: 1.不同的gradle版本,gradle api使用方式 与 JitPack配置方式均有所差异:使用JitPack…

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

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

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

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

红黑树解读与Java实现

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

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

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

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

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

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

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

JavaScript 红黑树

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

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

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

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

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

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三…