一、前言
gradle 在7.0后,具体不清楚哪一版,把依赖方式进行了修改。这里将过程记录如下
二、旧版依赖方式
这里以Hilt 的插件使用方式作为对比。 在项目级下面使用如下方式添加
buildscript {
...
dependencies {
...
classpath 'com.google.dagger:hilt-android-gradle-plugin:2.41'
}
}
然后,应用 Gradle 插件并在 app/build.gradle 文件中添加以下依赖项:
...
apply plugin: 'kotlin-kapt'
apply plugin: 'dagger.hilt.android.plugin'
android {
...
}
dependencies {
implementation "com.google.dagger:hilt-android:2.41"
kapt "com.google.dagger:hilt-android-compiler:2.41"
}
三、新版的依赖方式
修改项目下面的build.gradle 为如下
plugins {
id 'com.android.application' version '7.1.3' apply false
id 'com.android.library' version '7.1.3' apply false
id 'org.jetbrains.kotlin.android' version '1.6.21' apply false
id 'com.google.dagger.hilt.android' version '2.41' apply false
}
task clean(type: Delete) {
delete rootProject.buildDir
}
然后,应用 Gradle 插件并在 app/build.gradle 文件中不需要做改动
四、修改原因
为什么这样修改,根据网上查到的原因是新版升级后,gradle插件的发布也的需要做下更改,要不然还是用不了,所以并不是所有插件都可以这样改的,那么怎么知道这样改可以呢,如何知道要这样写呢。这个主要要去依赖的仓库查看,比如通常用的google() 和mavenCentral() 。这里以maven仓库为例。打开com.google.dagger.hilt.android 的maven地址: https://search.maven.org/artifact/com.google.dagger.hilt.android/com.google.dagger.hilt.android.gradle.plugin/2.41/pom
可以看到以下内容:
<dependency>
<groupId>com.google.dagger.hilt.android</groupId>
<artifactId>com.google.dagger.hilt.android.gradle.plugin</artifactId>
<version>2.41</version>
<type>pom</type>
</dependency>
第一个就是插件的依赖id,感觉本来在app/build.gradle 中应该是使用com.google.dagger.hilt.android.gradle.plugin 的。但是项目一直报错,说缺少id 'dagger.hilt.android.plugin' 。写上去后发现并没有报错。仔细查看网址发现,最下面有插件依赖关系: 所以可以知道以前的写法也是可以的。 那么假如不知道链接的话怎么查找?可以打开maven search网站 输入要查找的hilt 关键词。然后观察插件提供方和日期,以及名字,优先关注官方提供的,比如hilt是google提供的,关注最新日期,关注有plugin关键词的插件。点进去看下就好。多找几个,多试试,如果实在没有,那就没办法了。毕竟官方也没有直接说应该用哪个版本。这时候只能还使用之前的方式去添加依赖就好了,好在就是目前新旧版本添加插件的方式是共存的,所以没有什么影响。
五、为什么改成这种方式
这两种方式的区别就是来源了。旧的方式获取插件的来源是第三方的来源,新的来源是官方的或者是被官方信任的来源。这两种方式以前就有,最近发生更改可能是因为Jcenter()的原因吧。说到这里如果在新版本使用自定义的仓库地址可能会有问题,这个待测试。这里将外网的帖子google翻译下贴在下面
对于 Gradle 插件门户,该plugins { }块依赖于门户提供的 REST 服务来将插件 ID 转换为 maven 坐标。这适用于发布到门户的任何插件。
虽然工件当前直接由门户托管,但它们最初托管在 JCenter 上,因此对于在门户中未直接找到的任何内容都有一个后备重定向。这也意味着您通常可以在没有额外源的情况下解决非插件插件依赖项。
发生重定向是因为com.novoda.bintray-release已发布到 JCenter,而不是插件门户。如果您jcenter()只直接使用,您将无法解析仅在您的buildscript { }块中发布到插件门户的任何插件。使用允许您解析发布到插件门户或 JCenter(或 Maven 中心)gradlePluginPortal()的块中的任何插件,而无需关心它的发布位置或定义多个存储库。buildscript { }
六、其它插件地址
- gadle: https://repo.gradle.org/gradle/libs/
- gradle-libary: https://plugins.gradle.org/
- gradle-plugin: https://plugins.gradle.org/m2/
- google-maven(搜关键词plugin): https://maven.google.com/web/index.html?q=plugin
七、参考链接
- 使用 Hilt 实现依赖项注入
- Plugin [id: ‘dagger.hilt.android.plugin’] was not found in any of the following sources
- maven search
- When to use gradlePluginPortal()
- 允许使用 Gradle 的插件块应用 Android Gradle 插件
- Gradle 插件
|