mapstruct 和lombok 结合之后mapstruct生成空实现的解决办法

lombok和mapstruct配合转换bean后,mapstruct生成空的实现.

  • 如果出现mapstruct和lombok配合生成的bean实现类中是空实现,没有对生成bean进行setter赋值.那么就需要在maven-compiler-plugin插件下多配置一个lombok-mapstruct-binding注解处理器来绑定mapstructlombok.
  • pom文件内容如下:
 <properties>
        <java.version>1.8</java.version>
        <org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
    </properties>
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>${lombok.version}</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok-mapstruct-binding</artifactId>
                            <version>0.2.0</version>  <!-- 如果是0.1.0 有可能出现生成了maptruct的实现类,但该类只创建了对象,没有进行赋值 -->
                        </path>

                    </annotationProcessorPaths>
                </configuration>
            </plugin>
  • maven多项目打包时,在父项目的pom中配置maven打包插件:
       <!-- spring boot 与 maven结合打包插件 , 打包期间用到的-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <layers>
                        <enabled>true</enabled>
                    </layers>
                    <excludes>
                        <!-- 打包的时候忽略lombok,因为lombok值在编译器起作用 -->
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
  • 在子项目中如果是被依赖项目且没有项目入口文件的,则需要在子项目的pom中屏蔽打包插件,比如我的lj-buisness-core项目没有项目入口文件***Application.java,pom配置如下:
     <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>
  • 当然如果子项目有入口文件即LjCenteringBusinessCouponsApplication.java则该子项目的pom文件不需要配置spring-boot-maven-plugin插件,让其从父项目中继承即可.

推荐阅读更多精彩内容