Как я могу писать в журнал Gradle при обработке аннотаций?

У меня есть javax.annotation.processing.Processor, который я использую для создания исходных файлов. Все это работает нормально, но я хочу вывести некоторые отладочные сообщения на консоль во время сборки. Я могу использовать класс аннотации Messeger, но это не позволяет мне подключиться к журналу Gradle. Я бы хотел контролировать вывод с помощью параметров ведения журнала Gradle, поэтому gradle -d ... пишет отладочные сообщения, gradle -i ... информационные сообщения и т. д.

Есть ли способ получить регистратор Gradle из моего класса обработки Java-бинов?

Я прочитал документацию по ведению журнала Gradle и попытался использовать ведение журнала SLF4J, но это просто записывает мои сообщения в стандартный вывод, который Gradle получает как QUIET:

private static final Logger log = LoggerFactory.getLogger("org.gradle.example");

messeger.printMessage(Diagnostic.Kind.NOTE, "BeanProcessor: processing " + classElem);
log.debug("===debug=== BeanProcessor: processClass {}", classElem);
log.error("===error=== BeanProcessor: processClass {}", classElem);

21:28:22.211 [QUIET] [system.out] 21:28:22.208 [main] DEBUG com.example.beans.BeanProcessor - ===debug=== BeanProcessor: processClass com.example.beans.MyBean
21:28:22.212 [QUIET] [system.out] 21:28:22.212 [main] ERROR com.example.beans.BeanProcessor - ===error=== BeanProcessor: processClass com.example.beans.MyBean
21:28:22.216 [ERROR] [system.err] Note: BeanProcessor: processing com.example.beans.MyBean

Кроме того, регистратор, который я получаю, представляет собой ch.qos.logback.classic.Logger - в документе Gradle упоминается: «Logger ... расширяет интерфейс SLF4J Logger и добавляет несколько методов, специфичных для Gradle», поэтому я ожидаю увидеть некоторые специфичные для Gradle методы. класс регистрации.

Конфигурация Gradle соответствует Обработчик аннотаций в Gradle выводит исходные файлы для сборки/классов, что приводит к сбою javadoc. Как это исправить?

Спасибо,


person Barney    schedule 06.04.2015    source источник


Ответы (1)


Хак, который может помочь:

Вы можете создать новую пользовательскую задачу gradle, от которой зависят все задачи компиляции и которая устанавливает переменную системной среды в зависимости от того, были ли переданы -i, -d и т. д. в gradle (возможно, чтение значения logging.captureStandardOutput подойдет).

Затем прочитайте эту переменную среды при запуске вашего процессора аннотаций и используйте ее для условной записи в стандартный вывод.

person Merk    schedule 10.07.2019