MapStruct在编译时生成代码,并生成它不需要任何运行时依赖项。。
MapStruct与其他bean映射工具有什么不同? 与大多数其他bean映射工具不同,MapStruct在运行时不工作,而是编译时代码生成器。 在构建时生成映射代码有许多优点:
在Maven项目中应该使用哪个依赖范围?是否应该将MapStruct作为提供的依赖项包括在内?
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
发布于 2022-02-12 08:23:58
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
,您可以在<scope>provided</scope>
中使用<optional>true</optional>
。
对于Gradle,这将是compileOnly
依赖。
注意:在使用Spring和<scope>provided</scope>
时,Spring插件仍将在最终提供的jar中包含org.mapstruct:mapstruct
依赖项。您需要通过配置Spring插件来忽略它。
https://stackoverflow.com/questions/71081353
复制相似问题