首页 > 其他分享 >Maven 中<optional>true</optional>和<scope>provided</scope>之间的区别(转)

Maven 中<optional>true</optional>和<scope>provided</scope>之间的区别(转)

时间:2024-03-14 23:25:36浏览次数:27  
标签:provided optional 数据库 引用 scope true

原文:https://segmentfault.com/a/1190000019266080?utm_source=tag-newest

<optional>true</optional>和<scope>provided</scope> 有什么区别呢?

从语义来上理解
optional
可选的,可以理解为此功能/此依赖可选,如果不需要某项功能,可以不引用这个包。

scope provided
提供的,可以理解为此包不由我直接提供,需要调用者/容器提供。

举个例子说明二者的使用场景和区别
optional
现开发了一个类似Hibernate的框架,叫Summer吧,致敬下Spring,提供了多种数据库方言的支持:mysql/oracle/db2/postgresql…
每种数据库支持也独立了一个module,Summer的依赖中配置了每种数据库的支持包:summer-mysql-support/summer-oracle-support…

但是实际引用此框架/依赖时,并不需要所有数据库方言的支持。此时可以把数据库的支持包都配置为可选的true。
引用此框架时,只需按需引入自己需要的方言支持包即可,避免了冗余繁杂的依赖,也降低了jar包冲突的风险。

scope provided
现有一普通Web工程,必然会用到servlet-api这个包。但是实际上这个包一定是由容器提供的,因为我们这个web会部署到容器内,容器会提供servlet-api,如果此时项目中再引用的话就会造成重复引用,会有版本不一致的风险。

总结
二者从功能来看,都做到了依赖不传递。但在语义上表示不同,使用时按场景选择就好。

出自:https://segmentfault.com/a/1190000019266080?utm_source=tag-newest

标签:provided,optional,数据库,引用,scope,true
From: https://www.cnblogs.com/ajianbeyourself/p/18074250

相关文章

  • AI应用开发之路-准备:发起第2个开源小项目 SemanticKernel.DashScope
    上周我们发布了与AI应用开发相关的第1个开源小项目——DashScopeSDKfor.NET,今天我们再发布一个开源小项目——SemanticKernel.DashScope,今天这个项目才是主角,因为我们想基于SemanticKernel开发大模型应用。首先分享几个与SemanticKernel与DashScope相关的消息:Ja......
  • Vue学习笔记46--scoped样式 + less
    scoped样式<!--组件的默认样式css写法--><!--<stylescoped>.demo{background-color:cadetblue;}</style>--><stylelang="less"scoped>.demo{background-color:cadetblue;.myfontsize{font-size:40px;}......
  • 实现一个 std::optional
    实现一个std::optional如果写过c#或者是rust,那么对于里面的可空类型一定是很常用的。在c++17中添加了std::optional,也就是所谓的可空类型。不过这里的实现是placementnew的方式,也是位于栈上。structNoneOption{NoneOption()=default;}None;template<ty......
  • dotnet_服务声明周期_transient_scoped_singlton
    ASP.NET中的Transient、Scoped和Singleton区别该代码展示了ASP.NETCore中服务生命周期管理的不同选项,特别关注Transient、Scoped和Singleton服务。说明Transient:每次请求都会创建一个新的OperationService实例,并生成一个新的GUID。因此,同一个请求中的不同控制......
  • AI应用开发之路-准备:发起一个开源小项目 DashScope SDK for .NET
    今年我们有一个眼高手低的计划,打算基于SemanticKernel+DashScope(阿里云模型服务灵积)+Qwen(通义千问大模型),结合园子已有的产品与应用场景,开发面向开发者的AI应用,并将整个过程与大家分享。目前处于准备阶段,这篇博文分享的是遇到的第一个问题,并由此发起一个小开源项目......
  • 漫谈.net core和Autofac中的Scoped生命周期
      我们知道,.netcore内置了IOC容器,通常,一个服务的生命周期有三种:Transient、Scoped、Singleton  Transient:临时性的服务,当进行服务注入时,每次都是重新创建一个新的对象实例Scoped:范围性的服务,当在一个范围内进行服务注入时,保证使用同一个实例对象(可以理解为一个ISer......
  • java.util.Optional 是 Java 8 引入的一个类,用于处理可能为 null 的值。它可以避免 Nu
    可以使用 Optional 来包装可能为 null 的值,然后通过一系列方法来处理这个值,例如 isPresent() 检查是否有值,orElse() 获取值或默认值,map() 对值进行转换等。这样可以更安全地处理可能为 null 的情况。 importjava.util.Optional;publicclassOptionalExample{  ......
  • Semantic Kernel + 通义千问:借助 one-api 调用阿里云灵积 DashScope api
    one-api相当于是一个兼容OpenAIapi的api网关(针对api的反向代理),借助one-api可以通过已有的OpenAI客户端调用非OpenAI大模型的api,比如通义千问。DashScope是阿里云提供的模型服务灵积的英文名称,这里通过调用DashScopeapi使用通义千问qwen-max大模型。以容器......
  • 实现阿里云模型服务灵积 DashScope 的 Semantic Kernel Connector
    SemanticKernel内置的IChatCompletionService实现只支持OpenAI与AzureOpenAI,而我却打算结合DashScope(阿里云模型服务灵积)学习SemanticKernel。于是决定自己动手实现一个支持DashScope的SemanticKernelConnector——DashScopeChatCompletionService,实现......
  • 借助 .NET 开源库 Sdcb.DashScope 调用阿里云灵积通义千问 API
    在昨天的博文中,我们通过SemanticKernel调用了自己部署的通义千问开源大模型,但是自己部署通义千问对服务器的配置要求很高,即使使用抢占式按量实例,每次使用时启动服务器,使用完关闭服务器,也比较麻烦,而且越高级的大模型对服务器的配置越高。所以昨天的博文中使用了很低级的Qwen-7B......