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