我已经在这个问题上挣扎了很长时间,终于找到了一个适合我的解决方案:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
<generatedSourcesDirectory>${project.build.directory}/generated-sources</generatedSourcesDirectory>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>0.2.0</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.4.2.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
我添加了
generatedSourcesDirectory
参数,它开始工作。默认值是 ${project.build.directory}/generated-sources/annotations
,我还有其他源生成,例如由 querydsl
目录之外的 annotations
生成。我决定删除这个路径元素,它很有帮助。
我对lombok和mapstruct集成没有任何问题,我唯一的问题是运行mvn test或mvn install等maven命令时,它不会清理目标文件夹,然后mapstruct尝试重新创建实现文件。
所以,使用maven的选项
clean
。它将清除您的目标文件夹。mvn clean install
。
看来你终于没有问题了...
我也有类似的问题。我相信这是由多个插件生成代码、它们的输出目录和 maven-compiler-plugin 将 useIncrementalCompilation 设置为 true 引起的。就我而言,将 useIncrementalCompilation 设置为 false 有效,但不建议。
就我而言,我使用的插件及其各自的输出目录如下:
插件 | 输出目录 |
---|---|
avro-maven-插件 | ${project.build.directory}/生成源 |
maven 编译器插件 | ${project.build.directory}/ generated-sources/annotations |
apt-maven-插件 | ${project.build.directory}/ generated-sources/java |
我怀疑问题是 avro-maven-plugin 输出到 maven-compiler-plugin 输出父目录。将每个插件设置为其自己的同级目录是有效的。
插件 | 输出目录 |
---|---|
avro-maven-插件 | ${project.build.directory}/ generated-sources/avro |
maven 编译器插件 | ${project.build.directory}/ generated-sources/annotations |
apt-maven-插件 | ${project.build.directory}/ generated-sources/java |
更改类
SimpleSourceDestinationMapperImpl
的名称,它将被修复,因为在构建时带有注释@Mapper的接口SimpleSourceDestinationMapper
将生成已经存在的SimpleSourceDestinationMapperImpl.java
。