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