Mapstruct:使用 annotationProcessorPaths 在 intelliJ 中生成源
Mapstruct : generated sources in intelliJ using annotationProcessorPaths
我使用 Eclipse
IDE 开发了一个使用 Mapstruct
的应用程序,现在我要转到 IntelliJ
继续开发。
在 Eclipse 上一切正常,但由于使用 annotationProcessorPaths
.
,我在 IntelliJ 上出现意外行为
我的配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgs>
<compilerArg>
-Amapstruct.defaultComponentModel=${mapstruct.defaultComponentModel}
</compilerArg>
<compilerArg>
-Aorg.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
</compilerArg>
</compilerArgs>
</configuration>
在 IntelliJ 上,当我启动 Maven 全新安装时,我得到了生成的源代码:
@Component
public class FieldMapperImpl implements FieldMapper {
@Autowired
private FieldMapperResolver fieldMapperResolver;
...
}
但是当我 run/debug 我的 Spring 引导应用程序时,我得到的生成源是:
public class FieldMapperImpl implements FieldMapper {
private final FieldMapperResolver fieldMapperResolver = new FieldMapperResolver();
...
}
我该如何解决这个问题?
我假设您是 running/debugging Spring 直接通过 IntelliJ 启动应用程序。发生这种情况的原因是因为 IntelliJ 不从 maven-compiler-plugin
中获取配置。参见 IDEA-143742 and IDEA-150621。
您还必须单独配置 IntelliJ 注释处理器选项。您可以在 Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors
中找到
IntelliJ 调用处理器的方式很奇怪,你的 pom 中是否也有 mapstruct-processor
作为依赖项?
编辑:
IntelliJ 不获取 maven-compiler-plugin 编译器参数。默认组件模型是通过注释处理器选项设置的。为了让 IntelliJ 正常工作,应该在 IntelliJ 配置中设置相同的 属性 或使用 @Mapper(componentModel = "spring")
。 documentation
中的更多信息
我使用 Eclipse
IDE 开发了一个使用 Mapstruct
的应用程序,现在我要转到 IntelliJ
继续开发。
在 Eclipse 上一切正常,但由于使用 annotationProcessorPaths
.
我的配置如下:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
<source>${java.version}</source>
<target>${java.version}</target>
<compilerArgs>
<compilerArg>
-Amapstruct.defaultComponentModel=${mapstruct.defaultComponentModel}
</compilerArg>
<compilerArg>
-Aorg.hibernate.jpamodelgen.JPAMetaModelEntityProcessor
</compilerArg>
</compilerArgs>
</configuration>
在 IntelliJ 上,当我启动 Maven 全新安装时,我得到了生成的源代码:
@Component
public class FieldMapperImpl implements FieldMapper {
@Autowired
private FieldMapperResolver fieldMapperResolver;
...
}
但是当我 run/debug 我的 Spring 引导应用程序时,我得到的生成源是:
public class FieldMapperImpl implements FieldMapper {
private final FieldMapperResolver fieldMapperResolver = new FieldMapperResolver();
...
}
我该如何解决这个问题?
我假设您是 running/debugging Spring 直接通过 IntelliJ 启动应用程序。发生这种情况的原因是因为 IntelliJ 不从 maven-compiler-plugin
中获取配置。参见 IDEA-143742 and IDEA-150621。
您还必须单独配置 IntelliJ 注释处理器选项。您可以在 Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors
中找到IntelliJ 调用处理器的方式很奇怪,你的 pom 中是否也有 mapstruct-processor
作为依赖项?
编辑:
IntelliJ 不获取 maven-compiler-plugin 编译器参数。默认组件模型是通过注释处理器选项设置的。为了让 IntelliJ 正常工作,应该在 IntelliJ 配置中设置相同的 属性 或使用 @Mapper(componentModel = "spring")
。 documentation