Mapstruct вместе с другими обработчиками аннотаций в maven-pom

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0

<artifactId>yyy-data</artifactId>
<name>VS yyy (data)</name>

<parent>
    <groupId>de.xxx</groupId>
    <artifactId>yyy-server</artifactId>
    <version>8.1.0-SNAPSHOT</version>
</parent>
<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <distribution.outputDirectory>${project.build.directory}/dist</distribution.outputDirectory>
</properties>

<dependencies>

    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-apt</artifactId>
    </dependency>
    <dependency>
        <groupId>com.mysema.querydsl</groupId>
        <artifactId>querydsl-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.2.8</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-core</artifactId>
        <version>2.2.8-b01</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.2.8-b01</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.3.0.Final</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>1.3.0.Final</version>
                    </path>
                </annotationProcessorPaths>
                <annotationProcessors>
                    <annotationProcessor>de.zzz.annotation.processor.GenerateHibernateTypeForEnumProcessor</annotationProcessor>
                    <annotationProcessor>de.zzz.annotation.processor.GenerateHibernateTypeForWertelistenProcessor</annotationProcessor>
                    <annotationProcessor>de.zzz.annotation.processor.BusinessObjectAnnotationProcessor</annotationProcessor>
                    <annotationProcessor>com.mysema.query.apt.jpa.JPAAnnotationProcessor</annotationProcessor>
                </annotationProcessors>
            </configuration>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>compile</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

<profiles>
    <profile>
        <id>m2e</id>
        <activation>
            <property>
                <name>m2e.version</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin> 
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compile</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

Dear all,

Мне нужна помощь в реализации mapstruct в моем project. У меня уже есть несколько процессоров аннотаций, которые нужно указать в pom.xml maven. Mapstruct рекомендует добавить annotationProcessorPaths в pom.xml. Кажется, что невозможно использовать обе аннотации (annotationProcessorPaths и annotationProcessor) в одном pom. Если я это сделаю, я получаю сообщение об ошибке

Не удалось выполнить цель org.apache.maven.plugins: maven-compiler-plugin: 3.8.0: компиляция (по умолчанию) в проекте yyy-data: Ошибка компиляции [ОШИБКА] Обработчик аннотаций 'de.zzz.annotation.processor.GenerateHibernateTypeForEnumProcessor' не найден

Я укоротил помпон. Так что зависимостей может быть больше, чем действительно нужно.

Заранее спасибо Оливер


person Oliver    schedule 13.09.2019    source источник


Ответы (1)


Вы все еще можете использовать annotationProcessor. Вам нужно будет добавить mapstruct-processor в свои зависимости, а затем добавить org.mapstruct.ap.MappingProcessor в annotationProcessor.

Причина, по которой вы видите ошибку, заключается в том, что когда вы определяете annotationProcessorPaths, maven-compiler-plugin будет использовать только те для поиска процессоров аннотаций, а не другие ваши зависимости.

В качестве альтернативы вы также можете добавить все обработчики аннотаций, которые есть в annotationProcessoPaths, если ваши зависимости.

person Filip    schedule 13.09.2019
comment
Большое Вам спасибо. Ваше первое предложение решило проблему. У меня вопрос ко второму. Большинство других обработчиков аннотаций написаны самостоятельно и находятся внутри проекта. Мне не удалось узнать, как настроить annotationProcessorPath для таких классов. Не могли бы вы мне здесь намекнуть? Это должно быть что-то вроде добавления пути к классам проекта в пути процессора. - person Oliver; 13.09.2019
comment
Обычно вы пишете обработчики аннотаций в другом модуле и используете этот модуль в annotationProcessorPaths. Я не знаю, сможете ли вы добиться того, что делаете, с помощью того же модуля - person Filip; 13.09.2019