8

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

 3 years ago
source link: https://blog.csdn.net/haojiagou/article/details/115391998
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

我之前也以为挺简单的,因为之前自己也上传过,但是前几天的经历告诉我没有那么简单,特别是现在安卓 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.release
                groupId = '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_11
        targetCompatibility = 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-open

jdk:
  - 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 ,从来没想着去最权威的东西——官方文档,老想着别人可能也遇到过这个问题,直接去拿现成的,这是个不好的习惯,得改。

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK