Mapstruct只能通过maven包工作.. maven编译器插件真的有必要吗?

fdx2calv  于 2023-05-06  发布在  Maven
关注(0)|答案(2)|浏览(362)

我正在尝试在我的项目中设置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 fat jar,不需要显式地指定spring和lombok注解处理......那是非常美好的时光。
现在我甚至不确定我没有在上面的代码中引入一些回归,但是,无论如何,我注意到只有当我执行“mvn包”时才会生成mapstruct类。我希望,像lombok一样,每次保存对象时都会自动生成它们,但这并没有发生。
你知道吗?你能向我保证那个特定的构建块不会改变我的spring Boot 项目中的任何东西吗?

uxhixvfz

uxhixvfz1#

要使代码生成自动工作,请确保安装了m2e-apt plugin
至于有没有maven-compiler-plugin块。这是MapStruct团队喜欢推荐的一种风格。
MapStruct是一个注解处理器,这意味着您在运行时不需要它。因此,您需要两个依赖项mapstruct(注解所在的位置)和mapstruct-processor(处理器所在的位置)。处理器有一些额外的依赖项,并包含用于代码生成的阴影Freemarker。
annotationProcessorPaths的使用允许您拥有注解处理器路径,而不会在类路径上发生冲突,即不要意外地在生产代码中使用一些内部MapStruct类。最重要的是,你不需要Sping Boot 来打包mapstruct-processor为你的运行时应用提供的依赖。
在maven编译器文档中,annotationProcessorPaths的含义如下:
要作为注解处理器路径提供的类路径元素。如果指定,编译器将仅在这些类路径元素中检测注解处理器。如果省略,则使用默认类路径来检测注解处理器。检测本身取决于annotationProcessors的配置。
因此,如果你真的需要,你可以将mapstruct-processor添加到你的正常依赖项中。

pobjuy32

pobjuy322#

<!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-processor -->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.5.5.Final</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct -->
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>1.5.5.Final</version>
    </dependency>

这两个依赖项对我来说工作得很好!

相关问题