[英]Java 11 module-info and annotation processors
我们如何提供带有 Java 11 模块的注释处理器?
要注册注释提供程序,我们需要以下模块信息条目:
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
我们可以创建更小的运行时映像。
现在,当然,我可以将以下内容添加到模块信息中:
requires java.compiler;
但这也会导致java.compiler
成为自定义运行时映像的一部分。
但是注解处理有些特殊:它是在编译时运行的代码,而不是在运行时运行。 因此它不应该是运行时映像的一部分。 它应该只是编译时要求/依赖项。
有没有办法用 Java 11 模块系统解决这个问题?
看来你应该写
需要静态 java.compiler;
JLS 7.7.1 中指出
requires 关键字后面可以跟修饰符
static
。 这指定了依赖,虽然在编译时是强制性的,但在运行时是可选的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.