Kotlin注释处理器: can't make it work

标签 kotlin kapt

我的gradle构建:

buildscript {
    ext.kotlin_version = '1.1.4-3'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: "kotlin-kapt"

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}


kapt {
    processors = "libs.orm.codeGenerators.ModelProcessor" //PROCESSOR
}


dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"

    compile "com.google.auto.service:auto-service:1.0-rc3"   
}

处理器不在单独的模块中。

处理器不执行任何操作,在#process中它只是抛出异常,以查看它是否正常工作。

@AutoService(Processor::class)
@SupportedSourceVersion(SourceVersion.RELEASE_8)
class ModelProcessor : AbstractProcessor() {

    override fun process(annotations: MutableSet<out TypeElement>?, roundEnv: RoundEnvironment): Boolean {
        throw(Throwable("foo"))
        return true
    }

    override fun getSupportedAnnotationTypes() : MutableSet<String> {
        return mutableSetOf<String>("*")
    }

}

但绝对没有发生任何事情。没有错误,什么都没有。 我怎样才能让它发挥作用?

最佳答案

在我的实践中,AutoService 只是忽略 kotlin 类。您必须使用 java 类,或者编写您自己的 META-INF:

main/resources/META-INF/services/javax.annotation.processing.Processor 并包含:your.package.ModelProcessor

关于Kotlin注释处理器: can't make it work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46032368/

相关文章:

kotlin - 如何在 Koin 中提供基类?

kotlin - 扩展函数可以以 "static"的方式调用吗?

dictionary - 为什么类 'get' 的 'Map' 方法允许发送不相关的 key 而没有编译错误?

android - e : [kapt] An exception occurred: java. lang.IllegalArgumentException:intcannot be converted to an Element

kotlin - 检测kapt中的单例

android - 通过 SHA1 指纹字符串模拟 PackageInfo.signatures

java - 找不到字段的 getter

android - e : [kapt] 'com.sun.tools.javac.util.Context' class can't be found ('tools.jar' is absent in the plugin classpath). Kapt 不起作用

android - 使用 Android Gradle Plugin v. 3.5.2 构建 Android 项目时,我的构建失败

android - 如何在我的 gradle 插件中动态地将参数传递给 kapt 编译器?