无法加载类插件

问题描述 投票:0回答:3

我正在尝试生成第一个插件,但出现此错误:
找不到 jar:file 中指定的插件“common-plugin”的实现类“CommonPluginClass”
org.gradle.api.plugins.InvalidPluginException:应用插件请求时发生异常[id:'common-plugin']

enter image description here
这是我的

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' } 

我的例外:

  • 出了什么问题: 应用插件请求 [id: 'common-plugin'] 时发生异常
    找不到 jar:file:/C:/Users/User/.gradle/caches/jars-9/******/convention.jar 中指定的插件“common-plugin”的实现类“CommonPluginClass.kt” !/META-INF/gradle-plugins/common-plugin.properties。
    我想保留这棵树,我做错了什么?
android gradle android-gradle-plugin
3个回答
8
投票

也许已经晚了

我遇到了同样的问题,我通过将插件文件夹移动到 kotlin 目录本身并从所有插件类中删除包引用来解决它。

See the kotlin directory in the screenshot


3
投票

简而言之

您基本上应该通过将

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'

0
投票

我希望还不算太晚。我花了一整天的时间才弄清楚这一点。

这是我的 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

© www.soinside.com 2019 - 2024. All rights reserved.