我目前正在更新我的项目,作为步骤之一,我正在更改 gradle 文件以使用
plugins { id 'xxx' }
方式而不是旧的 apply plugin 'xxx'
方法。我能够将大部分导入迁移到新格式,但是我无法添加一些插件,因为我无法找到它们的 gradle 插件 ID。
例如,这是我的旧 gradle 文件:
settings.gradle 文件
include ':app'
项目的build.gradle文件
buildscript {
repositories {
google()
mavenCentral()
(...)
}
dependencies {
(...)
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.0'
classpath 'com.google.android.gms:oss-licenses-plugin:0.10.5'
}
}
(...)
模块的build.gradle文件
apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'
apply plugin: 'com.google.android.gms.oss-licenses-plugin'
(...)
这里是部分修改的新 gradle 文件:
settings.gradle 文件
pluginManagement {
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}
rootProject.name = "xxxx"
include ':app'
项目的build.gradle文件
plugins {
id 'com.android.application' version '7.3.1' apply false
id 'com.google.firebase.crashlytics' version '2.9.2' apply false
// DOESN'T WORK:
id 'com.google.android.gms.oss-licenses-plugin' version '0.10.5' apply false
}
(...)
模块的build.gradle文件
plugins {
id 'com.android.application'
id 'com.google.firebase.crashlytics'
// NEED TO SET SAME ID AS IN PROJECT'S GRADLE FILE PROBABLY:
id 'com.google.android.gms.oss-licenses-plugin'
(...)
}
问题在于如何获取给定插件的 gradle 插件 id? 许多插件安装说明使用旧的
apply plugin
方法,我不想混合使用它们。
例如,在类路径为
com.google.firebase:firebase-crashlytics-gradle
的 Crashlytics 中,id 为 com.google.firebase.crashlytics
- 我怎么知道这一点?我在 Stackoverflow 上的一个答案中找到了这一点,但没有关于某人如何知道这一点的信息。
目前我正在尝试添加 oss-licenses-plugin,但我完全不知道如何找到它的 gradle 插件 id... 有什么建议吗?
或者也许不能保证使用
classpath
添加的每个插件都可以转换为新的 plugins { }
方式?既然如此,我怎么能看出是这种情况呢?
插件发布者需要遵循某种模式,以便 Gradle 找到插件实现。
properties
文件需要包含在 JAR 的 META-INF/gradle-plugins
目录中。并且该文件的名称需要按以下方式格式化:
<plugin-id>.properties
在这个文件中,定义了插件实现:
implementation-class=<com.example.SomePluginImpl>
因此,要回答您的问题,您需要获取 JAR 并查看其内容以找出 id:
META-INF/gradle-plugins/<plugin-id>.properties
。
对于
com.google.android.gms.oss-licenses-plugin
,我在这里检查:链接。或者,您可以从 Maven 获取 JAR,提取其内容并检查 properties 文件:Link。
代码的另一个问题是,对于外部插件解析,您需要在
resolutionStrategy
下定义 pluginManagement
:
pluginManagement {
resolutionStrategy {
eachPlugin {
if (requested.id.id == 'com.google.android.gms.oss-licenses-plugin') {
useModule "com.google.android.gms:oss-licenses-plugin:${requested.version}"
}
}
}
repositories {
gradlePluginPortal()
google()
mavenCentral()
}
}
现在您应该能够在项目级别
build.gradle中使用
id 'com.google.android.gms.oss-licenses-plugin' version '0.10.5' apply false
。
根据gradle docs,你可以在这里
找到注册的插件并非所有 gradle 插件都可用,因为开发者需要先将插件发布到 gradle,这里如何发布插件https://plugins.gradle.org/docs/publish-plugin
编辑: 我试图找到 oss-licenses-plugin,但没有成功。所以你应该使用旧的方法来应用插件。
其他信息:应用gradle插件有什么区别