Как мы можем предоставить процессор аннотаций с модулем 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 модульной системы?