当前位置: 首页 > 知识库问答 >
问题:

Kotlin注释处理器不工作?我错过了什么?

后烨煜
2023-03-14

最近,我一直试图通过Kotlin制作一个注释处理器,但我似乎无法让它工作。所有东西都会编译,我不会出现任何错误,但当我检查jar文件的内容时,我看不到我试图创建的资源。

我已经尝试了几个小时的一切,我真的卡住了,所以只是寻求帮助:/我确实有一个随机类注释,看看它是否会工作,但没有运气。

注释类

@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.CLASS)
annotation class TestAnnotation

处理器类

@AutoService(TestAnnotation::class)
class TestAnnotationProcessor : AbstractProcessor() {
    override fun process(annotations: MutableSet<out TypeElement>, environment: RoundEnvironment): Boolean {        
        this.processingEnv.filer.createResource(StandardLocation.CLASS_OUTPUT, "", "test.txt")

        return true
    }

    override fun getSupportedSourceVersion() = SourceVersion.RELEASE_8

    override fun getSupportedAnnotationTypes() = setOf(TestAnnotation::class.java.canonicalName)
}

我的建筑

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar

plugins {
    java
    kotlin("jvm") version "1.3.50"

    kotlin("kapt") version "1.3.50"

    id("com.github.johnrengelman.shadow") version "5.1.0"
}

group = "com.example.test"
version = "1.0"

repositories {
    mavenCentral()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.1")

    implementation("com.google.auto.service:auto-service:1.0-rc6")
    kapt("com.google.auto.service:auto-service:1.0-rc6")
}

configure<JavaPluginConvention> {
    sourceCompatibility = JavaVersion.VERSION_1_8
}
tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

tasks.withType<ShadowJar> {
    dependencies {
        exclude(dependency("com.google.auto.service:auto-service:1.0-rc6"))
    }
}

共有1个答案

陶朝明
2023-03-14

为了使自定义注释处理器正常工作,您必须在构建脚本依赖项中使用它

dependencies {
    kapt project(':processor-module') // or what ever your processor's module is named.
    //OR
    kapt 'gourp:artifact:version' // if your processor is published into a maven repository.
}
 类似资料:
  • 我的gradle构建: 处理器不在单独的模块中。 处理器不做任何事情,在< code>#process中,它只是抛出,看看它是否在工作。 但绝对没有发生任何事情。没有错误,什么都没有。我怎样才能使它工作?

  • 我的react redux专用路由器不工作。它只是向我展示了我试图访问的路线的空白页。我的州没有在Redux开发工具上加载。这也可能是HashRouter的问题吗?My PrivateRoute组件: 我的应用程序,我正在包装我的路线,使其成为私人:

  • 我想从kotlin实体类生成jpa querydsl文件。 在线上有一个很好的例子,说明如何使用gradle生成dsl文件https://github.com/JetBrains/kotlin-examples/blob/master/gradle/kotlin-querydsl/build.gradle. 然而,我试图在maven中实现它,但没有运气。我目前的pom在下面。有人知道问题可能是什么

  • 在添加com.google.dagger:dagger-android-support依赖项后,我得到了这个gradle错误。 这是我的构建的一部分

  • 我的处理器中有一个简单的注释,如下所示: 这适用于java文件,但一旦我将文件转换为kotlin,注释的导入就不再有效。为什么? 我需要改变什么才能让他的注释也在Kotlin中工作?从文档中,我可以看到kotlin与java注释100%兼容,所以我有点困惑这里有什么问题...如果处理器不工作,需要调整以与kotlin一起工作,我会理解,但我不知道为什么导入本身不工作... 我说的图书馆在这里:ht

  • 我看到一个例子解释了Kotlin JVM的KATP,它正在工作。 我想知道它是否支持Kotlin JS?有什么例子吗?