Интегрировать процессор аннотаций в тот же проект - PullRequest
4 голосов
/ 16 апреля 2019

Можно ли использовать процессор аннотаций в том же проекте, где он определен?

Пример:

  • ЦСИ /

    • MyAnnotation.java
    • path_to_MyAnnotationProcessor.MyAnnotationProcessor.java
    • другие классы
  • ресурсы
    • META-INF / услуги / javax.annotation.processing.Processor
  • 1024 * П *

когда я буду запускать mvn clean install, я буду ожидать, что мой процессор будет обрабатывать классы, помеченные MyAnnotation.

Я не хочу импортировать уже скомпилированный процессор из другой библиотеки, я просто хочу использовать его, как только я определю его в моем src.

Пока я получаю сообщение об ошибке: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.6.1:compile (default-compile) on project my-project: Compilation failure [ERROR] Annotation processor 'path_to_MyAnnotationProcessor' not found

часть pom.xml, где я исх. к моим процессорам:

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.plugin.compiler}</version>
            <configuration>
                <source>${version.java}</source>
                <target>${version.java}</target>
                    <annotationProcessors>
                       <proc>path_to_MyAnnotationProcessor.MyAnnotationProcessor</proc>
                    </annotationProcessors>
            </configuration>
        </plugin>

Спасибо всем, особенно @Stefan Ferstl и @yegodm. Решение от yegodm: «Один способ состоит в том, что два имеют два модуля в одном проекте. Один модуль будет определять аннотации и процессор. Другой будет использовать его в качестве зависимости для установления порядка сборки».

1 Ответ

2 голосов
/ 17 апреля 2019

Самый простой способ решить эту проблему - преобразовать ваш проект в многомодульный проект, где процессор аннотаций находится в своем собственном модуле.Имея другой модуль для процессора аннотаций, вы можете использовать совершенно новую опцию <annotationProcessorPaths>, чтобы определить процессор аннотаций через groupId / artifactId.

Модуль, использующий аннотациюпроцессору может понадобиться зависимость от модуля процессора аннотаций, чтобы он был построен первым.

Примечание: В предыдущей версии этого ответа я описал дополнительный способ решения этой проблемы, который, по-видимому, нене работает из коробки.Эта часть была удалена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...