我们如何为Java 11模块提供注解处理器?
为了注册注解处理器,我们需要以下module-info条目:
import javax.annotation.processing.Processor;
import com.mycompany.mylib.impl.MyAnnotationProcessor;
module com.mycompany.mylib {
provides Processor with MyAnnotationProcessor;
}
很遗憾,这已经不够了,因为javax.annotation.processing
、javax.lang.model.*
和javax.tools
包不在java.base
模块中,而是在java.compiler
模块中。
在Java SE 8中,所有内容都可以在JRE中使用,但是在Java 11中,我们有了只使用子集的选项。使用jlink
,我们可以创建更小的运行时映像。
当然,我可以将以下内容添加到module-info文件中:
requires java.compiler;
但这会导致 java.compiler
也成为自定义运行时映像的一部分。
然而,注释处理是一种特殊的代码:它是在编译时运行的,而不是在运行时运行的。因此,它不应该是运行时映像的一部分。它应该只是一个编译时要求/依赖项。
有没有办法通过Java 11模块系统来解决这个问题?