带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(9)

简介: 带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(9)

带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)https://developer.aliyun.com/article/1339756?groupCode=taobaotech

MapStruct是如何与Lombok共存的?

 

查阅MapStruct官方文档可以发现这样一段内容:

image.png

 

其中提到,MapStruct的annotation processor必须在Lombok的annotation processor生成完代码之后,才可以正常运行。

 

所以,这应该就是在导入dependencies时,必须先导入Lombok包,再导入MapStruct-processor包才可以正常运行的原因了。不过还有个问题没有解决:

 

Maven到底在哪里规定了annotation processor的载入顺序?难道每次创建工程时,必须记住这些包导入顺序么?

 

MapStruct官方推荐的导入流程

 

在进一步查看MapStruct官网时发现,其并没有将MapStruct-processor放dependencies中,而是放在了 annotationProcessorPaths层级下:

https://mapstruct.org/documentation/installation/

  ...
<properties>
<org.mapstruct.version>1.5.2.Final</org.mapstruct.version>
</properties>
  ...
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
</dependencies>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source> <!-- depending on your project -->
<target>1.8</target> <!-- depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
<!-- other annotation processors -->
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>

 

 

 


 

这又是为什么呢?

查阅Maven官方文档,对于有这样一段描述:

If specified, the compiler will detect annotation processors only in those classpath elements. If omitted, the default classpath is used to detect annotation processors. The detection itself depends on the configura- tion of annotationProcessors.

即如果有层级,则使用这个层级声明注解处理器的顺序执行,如果没有,则按照默 认classpath的顺序来使用注解处理器。

 

地址:https://maven.apache.org/plugins/maven-compiler-plugin/com-pile-mojo.html#annotationProcessorPaths

地址:https://maven.apache.org/plugins/maven-compiler-plugin/com-pile-mojo.html#annotationProcessorPaths

 

带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(10) https://developer.aliyun.com/article/1339754?groupCode=taobaotech

 

相关文章
|
安全
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(4)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(4)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(4)
106 0
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(8)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(5)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(5)
109 1
|
算法
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(3)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(3)
|
SQL 缓存 JSON
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(1)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(1)
159 1
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(6)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(6)
|
网络协议
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(2)
带你读《2022技术人的百宝黑皮书》——性能优化之接口优化(2)
131 1
|
安全
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)
带你读《2022技术人的百宝黑皮书》——如何避免写重复代码:善用抽象和组合(2)
|
缓存 JSON 前端开发
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(6)
带你读《2022技术人的百宝黑皮书》——MapStruct,降低无用代码的神器(6)