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

标签 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;

}

现在,不幸的是,这还不够,因为软件包 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 模块系统解决这个问题?

最佳答案

看来你应该写

requires static java.compiler;


JLS 7.7.1 中指出

The requires keyword may be followed by the modifier static. This specifies that the dependence, while mandatory at compile time, is optional at run time.

关于Java 11 模块信息和注释处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59673063/

相关文章:

java - 如何在静态函数中使用模板?

java - 打印或 println 中的 IOException

java - SPI + JDK 9 + 模块信息.java

java - 发生此错误时 Error :(1, 1) java.desktop 和 java.datatransfer 中的 java : module JavaFX reads package java. awt

java - 无法从 java.base 模块导出包

java - 使用 Comparable、Java 进行 Collections.sort 时出错

java - 改进两次遍历数组(同一数组上的嵌套循环)

Java注释处理器: javax.validation.constraints.过去的注释更改了字段类型

wso2 - Ballerina 注释处理未按预期工作

java - 使用 Spoon Gradle 插件创建自定义注释处理器