自Java 9

时间:2018-10-31 13:04:04

标签: java java-9 annotation-processing java-10 java-11

我正在用Maven构建Java 11应用程序。

我有一个模块化的注释处理器作为依赖项,我希望它能被javac发现并运行,但是我无法使其按预期工作。 (或者也许我的期望是错误的?)

我的provides Processor with ...文件中有module-info,并且处理器jar中META-INF/services中没有文件,这是ServiceLoader工作的新方式,对吗?该处理器jar通过--module-path属性传递给javac,但未执行任何处理器。

我尝试在<annotationProcessorPaths>中为编译器插件指定此依赖关系,但是它使用-processorpath属性,这是一种旧方法!此依赖项没有META-INF/services,因此没有检测到并运行处理器。

当我在<compilerArgs>中手动指定时:

--processor-module-path=${settings.localRepository}/<path_to_my_jar>

...然后找到并执行了处理器!

因此,javac有一个“默认注释处理器发现过程”,这是一个古老的答案:What is the default annotation processors discovery process?

但是自Java 9以来,此发现过程不适用于我。

尽管我的处理器jar位于modulepath中,但是直到我用--processor-module-path手动指定处理器jar时,找不到处理器。

所以有两个问题:

  1. Javac在模块路径中找不到注释处理器
  2. 除了原始<compilerArgs>之外,Maven编译器插件没有任何指定模块化注释处理器的方法

我想念什么吗?

0 个答案:

没有答案