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中指定

posted @ 2022-01-06 17:20  鼠标的博客  阅读(29)  评论(0编辑  收藏  举报