首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Maven项目中的MapStruct依赖范围

Maven项目中的MapStruct依赖范围
EN

Stack Overflow用户
提问于 2022-02-11 14:02:10
回答 1查看 1.5K关注 0票数 3

MapStruct在编译时生成代码,并生成它不需要任何运行时依赖项。

MapStruct与其他bean映射工具有什么不同? 与大多数其他bean映射工具不同,MapStruct在运行时不工作,而是编译时代码生成器。 在构建时生成映射代码有许多优点:

  • 出色的性能,因为不需要在运行时生成反射或字节码;生成的代码包含普通的方法调用,就像映射器是手写的一样。
  • 不依赖于运行时,使MapStruct成为Android应用程序的一个很好的解决方案。

在Maven项目中应该使用哪个依赖范围?是否应该将MapStruct作为提供的依赖项包括在内?

代码语言:javascript
运行
复制
<dependencies>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${org.mapstruct.version}</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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插件来忽略它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71081353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档