我正在尝试生成第一个插件,但出现此错误:
找不到 jar:file 中指定的插件“common-plugin”的实现类“CommonPluginClass”
org.gradle.api.plugins.InvalidPluginException:应用插件请求时发生异常[id:'common-plugin']
这是我的
CommonPluginClass
:class CommonPluginClass: Plugin<Project> {
override fun apply(project: Project) {
project.task("hello") {
doLast {
println ("Hello from the CommonPluginClass")
}
}
}
}
非常简单。我的 build.gradle (约定)
plugins {
id 'groovy-gradle-plugin'
}
gradlePlugin {
plugins {
commonPlugin {
id = "common-plugin"
implementationClass = "CommonPluginClass"
}
}
}
并进入settings.gradle(构建逻辑)
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}
rootProject.name = "build-logic"
include(":convention")
进入build.gradle(应用程序)我以这种模式调用插件:
plugins { id 'common-plugin' }
您基本上应该通过将
plugins
文件的 build-logic/convention/build.gradle
块更改为如下所示来使其工作:
plugins {
id 'java-gradle-plugin'
id 'org.jetbrains.kotlin.jvm' version '1.6.21'
}
我已复制您设置的相关部分,如下(不显示 Gradle Wrapper 文件):
├── app
│ └── build.gradle
├── build-logic
│ ├── convention
│ │ ├── build.gradle
│ │ └── src
│ │ └── main
│ │ └── kotlin
│ │ └── CommonPluginClass.kt
│ └── settings.gradle
└── settings.gradle
这些文件的内容与您的问题中给出的内容相同,只是我更改了下面的文件。
这样,我就可以成功运行:
./gradlew :app:hello
build-logic/convention/build.gradle
plugins {
id 'java-gradle-plugin'
id 'org.jetbrains.kotlin.jvm' version '1.6.21'
}
gradlePlugin {
plugins {
commonPlugin {
id = "common-plugin"
implementationClass = "CommonPluginClass"
}
}
}
build-logic/convention/src/main/kotlin/CommonPluginClass.kt
import org.gradle.api.Project
import org.gradle.api.Plugin
class CommonPluginClass: Plugin<Project> {
override fun apply(project: Project) {
project.task("hello") { t ->
t.doLast {
println ("Hello from the CommonPluginClass")
}
}
}
}
settings.gradle
pluginManagement {
includeBuild('build-logic')
}
include ':app'
我希望还不算太晚。我花了一整天的时间才弄清楚这一点。
这是我的 AndroidApplicationConventionPlugin.kt
package com.jsandoval
import com.android.build.api.dsl.ApplicationExtension
import com.jsandoval.convention.configureKotlinAndroid
import com.jsandoval.convention.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.run {
pluginManager.run {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
}
extensions.configure<ApplicationExtension> {
defaultConfig {
applicationId = libs.findVersion("projectApplicationId").get().toString()
targetSdk = libs.findVersion("projectTargetSdkVersion").get().toString().toInt()
versionCode = libs.findVersion("projectVersionCode").get().toString().toInt()
versionName = libs.findVersion("projectVersionName").get().toString()
}
configureKotlinAndroid(this)
}
}
}
}
我很挣扎,错误点在该课上指出了行:1。我做了什么?删除 com.jsandoval 包。
现在的班级就像
import com.android.build.api.dsl.ApplicationExtension
import com.jsandoval.convention.configureKotlinAndroid
import com.jsandoval.convention.libs
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.configure
class AndroidApplicationConventionPlugin : Plugin<Project> {
override fun apply(target: Project) {
target.run {
pluginManager.run {
apply("com.android.application")
apply("org.jetbrains.kotlin.android")
}
extensions.configure<ApplicationExtension> {
defaultConfig {
applicationId = libs.findVersion("projectApplicationId").get().toString()
targetSdk = libs.findVersion("projectTargetSdkVersion").get().toString().toInt()
versionCode = libs.findVersion("projectVersionCode").get().toString().toInt()
versionName = libs.findVersion("projectVersionName").get().toString()
}
configureKotlinAndroid(this)
}
}
}
}
错误消失了。天啊XD