Java 11 модуль обработки информации и аннотаций - PullRequest
3 голосов
/ 10 января 2020

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

...