Java 11的模块信息和注解处理器

7

我们如何为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.processingjavax.lang.model.*javax.tools包不在java.base模块中,而是在java.compiler模块中。

在Java SE 8中,所有内容都可以在JRE中使用,但是在Java 11中,我们有了只使用子集的选项。使用jlink,我们可以创建更小的运行时映像。

当然,我可以将以下内容添加到module-info文件中:

requires java.compiler;

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

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

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

1个回答

2

看起来你应该写

requires static java.compiler;

JLS 7.7.1中指出:

requires关键字后面可以跟随修饰符static。这表示依赖项在编译时是必需的,但在运行时是可选的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接