Java 11 模块信息和注释处理器

Puc*_*uce 6 java annotation-processing module-info

我们如何提供带有 Java 11 模块的注释处理器?

要注册注释提供程序,我们需要以下模块信息条目:

import javax.annotation.processing.Processor;
import com.mycompany.mylib.impl.MyAnnotationProcessor;

module com.mycompany.mylib {

    provides Processor with MyAnnotationProcessor;

}
Run Code Online (Sandbox Code Playgroud)

现在,不幸的是,这是不是因为包装不够javax.annotation.processingjavax.lang.model.*javax.tools不是在java.base模块,但在java.compiler模块。

在 Java SE 8 中,一切都只在 JRE 中可用,但在 Java 11 中,我们可以选择只使用一个子集。随着jlink我们再可以创建更小的运行时间图像。

现在,当然,我可以将以下内容添加到模块信息中:

requires java.compiler;
Run Code Online (Sandbox Code Playgroud)

但这也会导致java.compiler成为自定义运行时映像的一部分。

但是注解处理有些特殊:它是在编译时运行的代码,而不是在运行时运行。因此它不应该是运行时映像的一部分。它应该只是编译时要求/依赖项。

有没有办法用 Java 11 模块系统解决这个问题?

Vic*_*rov 2

看来你应该写

需要静态java.compiler;

JLS 7.7.1 中指出

require 关键字后面可以跟修饰符static。这指定依赖关系虽然在编译时是强制性的,但在运行时是可选的。