Чтобы зарегистрировать поставщика услуг в Java 11, можно использовать следующую запись «информации о модуле»:
module com.mycompany.mylib {
provides ServiceInterface with ServiceImpl;
}
Однако с процессорами аннотаций это не работает. (Особенность процессоров аннотаций в том, что компилятор должен выбирать реализацию во время компиляции, а не приложение во время выполнения.)
Чтобы проверить это, я создал SSCCE s на GitHub .
Есть 2 модуля:
java11-sample-annotation-processor
: предоставляет аннотацию @Foo
и FooApplicationProcessor
java11-sample-lib
: предоставляет 2 примера классов, оба с аннотацией @Foo
Ожидаемый результат: в java11-sample-lib
JAR должно быть foo.txt
file
Версия в мастер-ветви - это версия , которая работает :
- Java 11
- нет
module-info
используется - регистрация процессора аннотаций в
src/main/resources/META-INF/services/javax.annotation.processing.Processor
В следующих версиях файл foo.txt
не создается:
В ветка регистрации в модуле-информации Я изменил 2 библиотеки на Java 11 модулей с модулем-информацией. Процессор аннотации здесь зарегистрирован в модуле info:
import com.github.puce77.java11annotationprocessortest.annotation.impl.FooApplicationProcessor;
module com.github.puce77.java11annotationprocessortest.annotation {
exports com.github.puce77.java11annotationprocessortest.annotation;
provides javax.annotation.processing.Processor with FooApplicationProcessor;
requires java.compiler;
}
Ветвь registration-in-module-info-moduleAndPkg равна небольшое изменение , где Я указал целевой модуль и целевой пакет (жестко запрограммированный), а не root пакет.
В registration-meta-inf ветке все еще оба имеют информацию о модуле, но процессор аннотаций регистрируется в src/main/resources/META-INF/services/javax.annotation.processing.Processor
, а не в информации о модуле (в случае, если компилятор не может работать с инструкциями в модуле-информации!?)
в ветви только для одного модуля Я снова удалил информацию о модуле из java11-sample-annotation-processor
. Процессор аннотаций зарегистрирован в src/main/resources/META-INF/services/javax.annotation.processing.Processor
.
Итак, мой вопрос: как мне настроить процессор аннотаций при работе с Java 11 модулями?