我有一个spring Boot 项目,它有lombok和mapstruct,并使用maven作为构建工具。我需要在编译时处理注解,并将结果生成的源代码与最终的jar打包在一起。构建成功。但是,最终的jar缺少mapstruct实现类。当我尝试启动spring Boot 应用程序时出现的错误是:
应用程序启动失败
说明:
com.some_org.service.salesforce.object.processor中的字段salesforceObjectMapper。SalesforceObjectProcessor需要类型为“com.some_org.service.salesforce.object.mapper.SalesforceObjectMapper”的Bean,但找不到该Bean。
行动:
考虑在配置中定义类型为“com.some_org.service.salesforce.object.mapper.SalesforceObjectMapper”的Bean。
下面是我的maven-compiler-plugin设置:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.2.0.Final</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<compilerArg>-Amapstruct.suppressGeneratorTimestamp=true</compilerArg>
<compilerArg>-Amapstruct.suppressGeneratorVersionInfoComment=true</compilerArg>
</compilerArgs>
</configuration>
</plugin>
2条答案
按热度按时间szqfcxe21#
最终通过在编译阶段使用执行覆盖默认编译目标解决了这个问题,如下所示:
9w11ddsr2#
如果你的lombok和mapstruct不能很好地配合,你可以使用
lombok-mapstruct-binding
来解决冲突(你不需要把它放在execution
标签中)。关键是将绑定工件包含在与lombok和mapstruct注解处理器配置相同的位置。在我的情况下效果很好!