【问题标题】:Annotation Processor Not Running注释处理器未运行
【发布时间】:2021-12-10 03:45:19
【问题描述】:

项目1(注解项目):

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() 语句?

【问题讨论】:

  • 您的问题是,为什么您在 init & process 方法中看不到 print 语句?
  • 是的!主要是为什么我没有得到 printMessage()。

标签: java java-8 annotation-processing


【解决方案1】:
@AutoService(TableProcessor.class)

应该是

@AutoService(Processor.class)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多