我正在用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时,找不到处理器。
所以有两个问题:
<compilerArgs>
之外,Maven编译器插件没有任何指定模块化注释处理器的方法我想念什么吗?