Mapstruct работает только через пакет maven .. действительно ли необходим плагин компилятора maven? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь настроить mapstruct с моим проектом, я привык к lombok, который делает это с помощью простого агента jvm, поэтому я действительно не могу понять, как заставить mapstruct работать.

Вот мой pom :

<properties>
    <m2e.apt.activation>jdt_apt</m2e.apt.activation>
</properties>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.version}</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
                <annotationProcessorPaths>
                    <path>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-configuration-processor</artifactId>
                        <version>${springboot.version}</version>
                    </path>
                    <path>
                        <groupId>org.projectlombok</groupId>
                        <artifactId>lombok</artifactId>
                        <version>${lombok.version}</version>
                    </path>
                    <path>
                        <groupId>org.mapstruct</groupId>
                        <artifactId>mapstruct-processor</artifactId>
                        <version>${org.mapstruct.version}</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
        <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${springboot.version}</version>
                </plugin>
    </plugins>
</build>

Пожалуйста, учтите, что до того, как mapstruct вступил в игру, мне не понадобился весь этот блок плагинов для компиляции maven: все работало нормально. Я мог бы создать свою толстую банку Springboot без каких-либо проблем, без необходимости явно указывать обработку аннотаций Spring и Lombok ... это были очень хорошие времена.

Теперь я даже не уверен, что я не сделал этого Введем некоторые регрессии с помощью приведенного выше кода, но, во всяком случае, я заметил, что классы mapstruct генерируются, только когда я делаю "mvn package". Я ожидал, как и для lombok, что они будут генерироваться автоматически каждый раз, когда я сохраняю объект, но этого не происходит.

У вас есть идеи? И можете ли вы заверить меня, что этот указанный c сборочный блок ничего не меняет в моем проекте весенней загрузки?

1 Ответ

0 голосов
/ 30 марта 2020

Для автоматической генерации кода убедитесь, что у вас установлен плагин m2e-apt .

Что касается наличия или отсутствия блока maven-compiler-plugin. Это то, что командам MapStruct нравится рекомендовать.

MapStruct - процессор аннотаций, а это значит, что он вам не нужен во время выполнения. Следовательно, вам нужно 2 зависимости mapstruct, где расположены аннотации, и mapstruct-processor, где расположен процессор. Процессор имеет некоторые дополнительные зависимости и содержит затененный Freemarker для генерации кода.

Использование annotationProcessorPaths позволяет вам иметь пути процессора аннотаций и не иметь конфликтов на вашем пути к классам, т.е. не случайно использовать некоторые внутренние классы MapStruct в вашем рабочем коде. Кроме того, вам не требуется Spring Boot для упаковки предоставленной mapstruct-processor зависимости для вашего приложения во время выполнения.

Из документации maven-compiler annotationProcessorPaths означает следующее :

Элементы Classpath для предоставления в качестве пути процессора аннотаций. Если указано, компилятор будет обнаруживать процессоры аннотаций только в этих элементах classpath. Если опущен, путь к классу по умолчанию используется для обнаружения процессоров аннотаций. Само обнаружение зависит от конфигурации annotationProcessors.

Поэтому, если вы действительно хотите, вы можете добавить mapstruct-processor к своим обычным зависимостям.

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