maven 实用笔记记录
<scope>compile</scope>
1. compile 默认的范围,作用于所有阶段,测试+编译+运行都有效,都会打包进项目
2. provided 测试+编译时有效,不打包进项目,运行时不需要或不打算提供,比如环境会默认提供的servlet-API,以及不想打包进去的如swagger,lombok
3. runtime 测试+运行时有效,会打包进项目
4. test 仅测试有效,不打包进去
5. system 必须显式提供一个位于本地系统中JAR文件的路径,需要指定systemPath路径,不推荐
6. import 只在使用dependencyManagement中,表示从其他pom中导入dependecy的配置,用的少
官网参考:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
<optional>true</optional>
表示对应的jar包不会依赖传递下去
package,install,deploy命令区别
package:编译,测试,打包(jar or war)
install :package,并布署到本地 maven 仓库
deploy:install,并部署到远程maven库
maven中jar包版本依赖优先级关系
本级依赖版本(后加载的 > 先加载的) > 本级管理版本 > 上级依赖版本(包括管理版本) > 下级依赖版本(先加载的 > 后加载的)
本级用不到下级的管理版本
总体来说就是 【本级jar的版本】 优先于【parent包里这个jar的版本】parent优先于【dependency的包里这个jar的版本】
上级就是parent,springboot项目一般是spring-boot-starter-parent作为parent,这样的话如果本级没有指定某个jar的版本,用的就是springboot默认的版本了,比如kafka,redis这样的中间件的版本
本级依赖:后加载的优先于先加载的,就是本级如果引用了同一个jar的不同版本的情况,dependency后出现的覆盖先出现的,看位置
本级依赖和管理版本:就是dependency里指定了jar的版本,那么会忽略掉dependencyManagement里指定的版本
下级版本:一般是公司出的框架包里的jar的版本,如果本级没有指定过,那么就会默认使用下级的,想覆盖框架包的版本,就手动在本级dependency中指定