繁体   English   中英

注释处理器未运行

[英]Annotation Processor Not Running

项目一(注解项目):

build.gradle

plugins {
    id 'java'
}

apply plugin: 'java'

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    annotationProcessor 'com.google.auto.service:auto-service:1.0.1'
    implementation 'com.google.auto.service:auto-service:1.0.1'

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
}

test {
    useJUnitPlatform()
}

注解

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Table {
    String value();
    String[] ignoreColumns() default {};
}

处理器

@AutoService(TableProcessor.class)
@SupportedAnnotationTypes("com.github.ahuangJM.annotations.Table")
@SupportedSourceVersion(SourceVersion.RELEASE_8)
public class TableProcessor extends AbstractProcessor {
    @Override
    public synchronized void init(ProcessingEnvironment processingEnv) {
        System.out.println("init hit!");
        super.init(processingEnv);
    }

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        final Messager messager = processingEnv.getMessager();
        messager.printMessage(Diagnostic.Kind.NOTE, "Processing...");
        return true;
    }
}

\resources\META-INF\javax.annotation.processing.Processor

org.example.processors.TableProcessor

项目2(注解项目消费者):

注释消费者

@Table("user-info")
public class UserInfo {
}

build.gradle

plugins {
    id 'java'
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation files("REDACTED\\code-generator-annotation.jar")
    annotationProcessor files("REDACTED\\code-generator-annotation.jar")

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
}

test {
    useJUnitPlatform()
}

这应该是一个非常简单的注释处理器,只打印调试语句。 这一切对我来说似乎都是正确的,但是当我构建/运行项目 2 时process()没有运行。我也尝试过覆盖getSupportedVersion()getSupportedAnnotationTypes() 那没有做任何事情。 也尝试不@AutoService ,这也没有改变任何东西。

编辑:为什么我可以得到print()和/或printMessage()语句?

@AutoService(TableProcessor.class)

应该

@AutoService(Processor.class)

@Retention(RetentionPolicy.RUNTIME)

应该

@Retention(RetentionPolicy.SOURCE)

@AutoService(TableProcessor.class)

应该

@AutoService(AbstractProcessor.class) or @AutoService(Processor.class)

@autoservice(X) 表示您实现了 X,但我在您的问题中看到了 class 或接口处理器,因此您必须确定实现了什么,但您的 @autoservice 首先是错误的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM