首先,下载并安装 Maven,然后下载并安装 IntelliJ IDEA(以下简称 IDEA)。 (如果您不知道如何使用Windows CMD,请参阅此短教程 ,还有: 如何打开命令提示符)
在IDEA中创建一个没有任何原型的Maven项目。 然后在src> main> java中创建一些软件包。
创建一个扩展 javax.annotation.processing.AbstractProcessor 的类。
插入一些最小的代码,以使其工作。(不要忘记类声明顶部的注释!)
假设注释完整路径为core.Factory
,则代码将如下所示:
@SupportedAnnotationTypes("core.Factory")
public class MyProcessor extends AbstractProcessor {
Messager messager;
@Override
public void init(ProcessingEnvironment env) {
messager = env.getMessager();
super.init(env);
}
@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
for (TypeElement te : annotations)
for (Element e : roundEnv.getElementsAnnotatedWith(te))
messager.printMessage(Diagnostic.Kind.NOTE, "Printing: " + e.toString());
return true;
}
@Override
public SourceVersion getSupportedSourceVersion() {
return SourceVersion.latestSupported();
}
}
在相同的包中创建一个注释。
public @interface Factory {
}
在该项目中,可能有一个目录src > test > java,在其中创建一个与您之前创建的包同名的新包。然后在其中创建一个以“Test”结尾的类(例如:MyProcessorTest)。然后使用您之前创建的新注释类型(@Factory)对此类进行注释。@Factory
public class MyProcessorTest {
}
现在,为了使注解处理器起作用,它们必须在META-INF中有一些文件。为了实现这一点,我们将使用另一个名为autoservice的注解处理器。因此,在pom.xml文件中插入它的依赖项。
<dependencies>
<dependency>
<groupId>com.google.auto.service</groupId>
<artifactId>auto-service</artifactId>
<version>1.0-rc2</version>
</dependency>
</dependencies>
7.1 旁注:由于某些原因,如果我不明确指定,Maven项目会使用Java 1.5。要强制其与Java 1.8一起工作,请将此插入pom.xml文件中。
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
在我们的处理器类中使用@AutoService(Processor.class)
进行注释。
现在,我们需要在IDEA中设置远程调试配置。要做到这一点,请转到Run > Edit Configurations,点击左上角的绿色+按钮,选择remote。将其命名为“mvnDebug”,将主机设置为localhost,将端口设置为8000,按下ok就可以了。
在我们的处理器中的process方法中设置一个断点。
打开Windows命令提示符,导航到您的项目目录,在其中pom.xml所在的位置。然后键入mvnDebug clean install。如果一切都设置正确,它应该显示类似于“Listening for transport dt_socket at address: 8000”的内容。
回到IDEA并执行我们刚刚创建的mvnDebug配置。如果一切都设置正确,它应该显示类似于“Connected to the target VM, address: 'localhost: 8000', transport: 'socket'” 的内容。
返回命令提示符,如果没有发生任何事情,请按某个键唤醒它。
如果所有设置都正确,IDEA将停在断点处,暂停javac(Java编译器)的执行。
有关注释处理的其他教程