[英]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
注释消费者
@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.