无法加载Plugin类

4
我正在尝试生成第一个插件,但是出现了这个错误:
在Jar文件中指定的“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(app)中以以下方式调用插件:
plugins { id 'common-plugin' }
但是出现了以下错误:

  • 错误信息: 应用插件请求 [id: 'common-plugin'] 时发生异常
    在jar:file:/C:/Users/User/.gradle/caches/jars-9/******/convention.jar!/META-INF/gradle-plugins/common-plugin.properties中指定的插件“common-plugin”未找到“CommonPluginClass.kt”的实现类。
    我想保留这个依赖树,我做错了什么?
2个回答

3

也许有点晚了

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

See the kotlin directory in the screenshot


还有这个,还有这个是在类的顶部声明的包引用。 - undefined
太好了,它起作用了。 - undefined

2

简而言之

你需要将build-logic/convention/build.gradle文件中的plugins块更改为以下内容:

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'

你在 build.gradle:app 中添加了 id 'common-plugin' 插件。看起来它无法正确构建 jar 文件。 - Thorny84
抱歉,我不确定我理解你的评论。是的,在我的app/build.gradle文件中确切地有plugins { id 'common-plugin' }。Gradle也已经成功为我构建了插件jar-否则运行:app:hello任务将无法成功。你试过我的一些设置更改吗?这是否对你产生了任何影响? - Chriki
是的,我已经更改了Gradle基础代码。但是我又遇到了错误。 - Thorny84
иҝҳжҳҜеҗҢж ·зҡ„й”ҷиҜҜеҗ—пјҹдҪ зҡ„*.gradleж–Ү件е’ҢжҲ‘зҡ„жңүд»Җд№ҲдёҚеҗҢпјҹжҲ‘зү№еҲ«жғізңӢзңӢдҪ зҡ„йЎ¶еұӮsettings.gradleж–Ү件гҖӮеҰӮжһңдҪ иҝҗиЎҢ./gradlew :build-logic:convention:jarпјҢиғҪжҲҗеҠҹеҲӣе»әbuild-logic/convention/build/libs/convention.jarеҗ—пјҹ - Chriki
1
它的成功。更新Gradevole版本。 - Thorny84

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接