Пользовательский процессор аннотаций не работает - PullRequest
0 голосов
/ 01 июля 2018

Я написал AnnotationProcessor для тестирования, и он не выполняется maven.

Я использую "автосервис" Google для создания данных META-INF для меня.

Это процессор:

@SupportedAnnotationTypes({ "test.TestAnnotation" })
@SupportedSourceVersion(SourceVersion.RELEASE_8)
@AutoService(Processor.class)
public class AnnotationProcessor extends AbstractProcessor {

    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
        System.out.println("Test");
        this.processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "Test");
        return true;
    }

}

Я также пытался генерировать исключения, создавать файлы, запускать mvnDebug с точками останова и т. Д. У меня ничего не получалось.

Это важная часть проекта, предоставляющая процессор (остальное - просто идентификатор группы, наименование и т. Д.):

<dependencies>
    <dependency>
        <groupId>com.google.auto.service</groupId>
        <artifactId>auto-service</artifactId>
        <version>1.0-rc4</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArgument>-proc:none</compilerArgument>
            </configuration>
        </plugin>
    </plugins>
</build>

Это важная часть POM проекта, которая использует аннотации для генерации кода:

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>Annotation</artifactId>
        <version>${project.version}</version>
        <scope>compile</scope>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
        </plugin>
    </plugins>
</build>

Моя конечная цель - позволить проектам добавить мой процессор аннотаций в качестве зависимости и готов к использованию (вроде как lombok).

Редактировать Тестовая аннотация используется на тестовом классе.

Ответы [ 3 ]

0 голосов
/ 15 августа 2018

Так что это начинает иметь смысл.

Настройка подключаемого модуля эффективно отключает обработку комментариев. Это необходимо, потому что в противном случае компилятор найдет служебный файл и попытается загрузить ваш процессор аннотаций, который еще не доступен (он будет поставляться только с этим модулем).

Но в этом случае ваш сервисный файл также не генерируется. И поэтому ваш процессор не вызывается в целевом модуле.

Чтобы решить вашу проблему, вы можете попробовать использовать различные способы указания используемых процессоров аннотаций.

например. Вы можете попытаться указать путь к процессору аннотации (что, в свою очередь, отключает поиск процессоров аннотаций на пути к классам):

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <annotationProcessorPaths>
                    <annotationProcessorPath>
                        <groupId>com.google.auto.service</groupId>
                        <artifactId>auto-service</artifactId>
                        <version>1.0-rc4</version>
                    </annotationProcessorPath>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

Тогда не нужно <compilerArgument>-proc:none</compilerArgument>.

0 голосов
/ 25 апреля 2019

Этот следующий пом работает. Maven очень строгий здесь. Нет annotationProcessorPaths с Path или annotationProcessorPath в нем, нет annotationProcessors с annotationProcessor (насколько я понял, это готовые фляги.

              <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                    <configuration> 
                        <source>10</source>
                        <target>10</target>
                        <outputDirectory>${generatedSources}</outputDirectory>
                        <annotationProcessorPath>
                              <artifactId>processing</artifactId>
                              <name>annotation_processing</name>    
                              <version>0.0.1-SNAPSHOT</version>                 
                        </annotationProcessorPath>
                    </configuration>
              </plugin>

Maven скомпилирован и установлен с успехом.

0 голосов
/ 02 июля 2018

Удалить аргумент proc:none.

Будет пропущен процесс аннотации. Так что @AutoService не будет работать.

Или вы можете добавить файл сервиса java вручную.

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