MapStruct在編譯時生成代碼,它不應該需要任何運行時依賴項:
MapStruct 與其他 bean 映射工具有何不同?
與大多數其他 bean 映射工具不同,MapStruct 不能在運行時作業,而是一個編譯時代碼生成器。
在構建時生成映射代碼有很多優點:
- 卓越的性能,因為在運行時不需要反射或位元組碼生成;生成的代碼包含普通的方法呼叫,就像映射器是手寫的一樣
- 沒有運行時依賴,使 MapStruct 成為 Android 應用程式的絕佳解決方案
在 Maven 專案中應該使用哪個依賴范圍?MapStruct 是否應該作為提供的依賴項包含在內?
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
uj5u.com熱心網友回復:
org.mapstruct:mapstruct依賴項包含所需的注釋來指示要做org.mapstruct:mapstruct-processor什么。
它還包含Mappers使用默認組件模型時使用的工廠。因此,范圍org.mapstruct:mapstruct取決于您使用的組件模型:
默認組件模型
如果您正在使用此組件模型,那么如果您正在使用或者如果您在不同的映射器之間存在依賴關系,則需要org.mapstruct:mapstruct在運行時。Mappers
理論上,您可以使用默認組件模型并實體化您自己的映射器。但是,映射器之間的依賴關系仍然會使用Mappers,除非您已經以MyMapper.INSTANCE某種方式實體化了映射器,否則 MapStruct 將用于MyMapper.INSTANCE獲取MyMapper. 這意味著您仍然可以使用與其他組件模型相同的范圍(有關更多資訊,請參見下文)
其他組件模型(spring、jsr330、cdi等)
在這種情況下,您在運行時不需要org.mapstruct:mapstruct,您可以使用<optional>true</optional>with <scope>provided</scope>。
對于 Gradle,這將是compileOnly依賴。
注意:使用 Spring Boot 時要小心,<scope>provided</scope>Spring Boot maven 插件仍會org.mapstruct:mapstruct在最終提供的 jar 中包含依賴項。您需要通過配置 Spring Boot Maven 插件來忽略它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/425991.html
上一篇:netty依賴帶來舊版本
