尝试在Gradle中使用自定义Kotlin编译器插件时,为什么会出现UnknownPluginException?

时间:2019-04-25 13:31:35

标签: gradle kotlin gradle-plugin gradle-kotlin-dsl

我为Gradle创建了一个自定义的Kotlin编译器插件。它受到kotlin-allopen (2)sample-kotlin-compiler-plugin的启发,并且应该使所有Kotlin类都不再适用。

问题是,我无法在项目中使用它,我只能得到以下内容:

Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin with id 'no.synth.kotlin.plugins.kotlin-really-allopen' not found.
    at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:131)

我尝试了两种“新”插件语法:

plugins {
  id "no.synth.kotlin.plugins.kotlin-really-allopen" version "0.1"
}

..和旧的:

buildscript {
  repositories {
    mavenLocal()
  }
  dependencies {
    classpath "no.synth.kotlin.plugins:kotlin-really-allopen:0.1" 
  }
}

apply plugin: "kotlin-really-allopen" // I've tried "no.synth.kotlin.plugins.kotlin-really-allopen" as well

那我做错了什么?这是插件:https://github.com/henrik242/kotlin-really-allopen

编辑:我已经使用示例应用程序和README.md更新了存储库,以轻松重现该问题。

2 个答案:

答案 0 :(得分:1)

您的Gradle插件似乎未包含META-INF/gradle-plugins下的任何条目。

Gradle要求每个插件ID都映射到实现类,并且此映射存储在META-INF/gradle-plugins资源中。

要映射插件ID kotlin-really-allopen,您需要一个资源文件 src/main/resources/META-INF/gradle-plugins/kotlin-really-allopen.properties

请参阅:Wiring for a custom plugin

您还可以使用Gradle Plugin Development Plugin,它会从构建脚本DSL自动生成这些条目。


此外,您的存储库似乎并不包含实际的Gradle插件实现,只有编译器需要加载的部分。对于也包含Gradle部分的示例,请查看kevinmost/debuglog

答案 1 :(得分:0)

在顶部的apply plugin: "kotlin-really-allopen"模块应用中移动build.gradle