Java-spring/springboot-maven项目环境的依赖

Maven****的传递性和依赖性

依赖管理
  1. compile-默认值编译范围,默认 scope ,在工程环境的 classpath (编译环境)和打包(如果是 WAR 包,会包含在 WAR包中)时候都有效。
  2. provided容器或 JDK 已提供范围,表示该依赖包已经由目标容器(如 tomcat )和 JDK 提供,只在编译的 classpath 中加载和使用,打包的时候不会包含在目标包中 。最常见的是j2ee 规范相关的 servlet-api 和 jsp-api 等 jar 包,一般由servlet 容器提供,无需在打包到 war 包中,如果不配置为 provided ,把这些包打包到工程 war包中,在 tomcat6 以上版本会出现冲突无法正常运行程序(版本不符的情况)。
  3. runtime一般是运行和测试环境使用,编译时候不用加入 classpath ,打包时候会打包到目标包中。一般是通过动 态加载或接口反射加载的情况比较多。也就是说程序只使用了接口,具体的时候可能有多个,运行时通过配置文件或jar 包扫描动态加载的情况。典型的包括: JDBC 驱动等。
  4. test测试范围,一般是单元测试场景使用,在编译环境加入classpath,但打包时不会加入,如junit等。
  5. system(一般不用,不同机器可能不兼容)
    系统范围,与 provided 类似,只是标记为该 scope 的依赖包需要明确指定基于文件系统的 jar 包路径。因 为需要通过systemPath 指定本地 jar 文件路径,所以该 scope 是不推荐的。如果是基于组织的,一般会建 立本地镜像,会把本地的或组织的基础组件加入本地镜像管理,避过使用该scope 的情况。

左边第一列表示第一直接依赖范围

上面第一行表示第二直接依赖范围

中间的交叉单元格表示传递性依赖范围。

定义在标签

总结:

(1) 当第二依赖的范围是 compile 的时候,传递性依赖的范围与第一直接依赖的范围一致。

(2) 当第二直接依赖的范围是 test 的时候,依赖不会得以传递。

(3) 当第二依赖的范围是 provided 的时候,只传递第一直接依赖范围也为 provided 的依赖,且传递性依赖的范围同样为 provided ;

(4) 当第二直接依赖的范围是 runtime 的时候,传递性依赖的范围与第一直接依赖的范围一致,但

compile 例外,此时传递的依赖范围为 runtime ;

依赖冲突

(1) 如果直接与间接依赖中包含有同一个坐标不同版本的资源依赖,以直接依赖的版本为准(就近原则)

(2) 如果直接依赖中包含有同一个坐标不同版本的资源依赖,以配置顺序下方的版本为准(就近原则)

可选依赖

true/false 用于设置是否可选,也可以理解为jar包是否向下传递。

在依赖中添加 optional 选项决定此依赖是否向下传递,如果是 true 则不传递,如果是 false 就传递,默认为false 。

排除依赖

在直接依赖的配置里面添加 exclusions → exclusion 元素,指定要排除依赖的 groupId 和 artifactId 就行,如下面代码所示。

说明:排除依赖包中所包含的依赖关系,不需要添加版本号。

排除前

排除后

项目中出现包名和类名一样的时候。如果idea 项目project structure 可以调整依赖jar的顺序,把需要使用的jar 放到最前面即可

相关推荐
消失的旧时光-19439 小时前
Spring Boot 核心机制之 @Conditional:从原理到实战(一次讲透)
java·spring boot·后端
石榴树下的七彩鱼9 小时前
智能抠图 API 接入实战:3 行代码实现图片自动去背景(Python / Java / PHP / JS)
java·图像处理·人工智能·python·php·api·抠图
知兀9 小时前
【Result类】(使用/不使用<T> data的情况);自带静态方法、纯数据类;
java·开发语言
Seven979 小时前
【从0到1构建一个ClaudeAgent】协作-自主Agent
java
洋不写bug9 小时前
Java线程(三):线程执行顺序问题、可重入锁、加锁操作解析,死锁解决
java·开发语言
huabiangaozhi9 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
Java成神之路-9 小时前
彻底搞懂Spring IoC 容器:容器本体、扩展机制、三级缓存与 getBean
spring
lifallen9 小时前
Flink Source / Sink Exactly-Once 边界分析
java·大数据·flink
AI服务老曹9 小时前
打破视频孤岛:基于 ZLMediaKit 的 GB28181 与 RTSP 统一接入网关架构设计
人工智能·spring boot·音视频
xyyaihxl9 小时前
将 vue3 项目打包后部署在 springboot 项目运行
java·spring boot·后端