版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/t1g2q3/article/details/85529407
- 什么是Maven?
- 没有使用Maven的时候是如何管理Jar包的?
- 和Ant相比,Maven中的约定由于配置体现在哪里?
- https://www.cnblogs.com/itech/archive/2011/11/01/2231837.html
Maven工程的目录结构必须为如下的结构,这就是约定:
- https://www.cnblogs.com/itech/archive/2011/11/01/2231837.html
- Maven的坐标
- groupId:所需Jar包的项目名
- artifactId:所需Jar包的模块名
- version:所需Jar包的版本号
- Maven的结构
- bin-命令
- boot-类加载器框架
- conf-配置
- 局部配置优先于全局配置
- 配置优先级从高到低:pom.xml> user settings > global settings
如果这些文件同时存在,在应用配置时,会合并它们的内容,如果有重复的配置,优先级高的配置会覆盖优先级低的。
- 配置优先级从高到低:pom.xml> user settings > global settings
- 局部配置优先于全局配置
- lib-依赖包
- maven-model-builder-3.6.0包中的pom文件定义了约定。
- pom.xml
- groupId 组织机构
- artfactId 功能命名
- version 版本号
- packaging 打包方式 默认jar
- dependencyManagemement
- 只能出现在父pom里
- 统一版本号
- 声明(子pom中用到再引用)
- 最佳实践
- 父pom定义为企业级别或者部门级别控制依赖包版本
- 其他介绍
- 版本管理
- a)1.0-SNAPSHOT
i.repository 删除
ii.mvn clean package -U (强制拉一次) - b)1.0.0-RELAESE
主版本号.次版本号.增量版本号-<里程碑版本>
- a)1.0-SNAPSHOT
- 常用命令
- compile
- clean
- test
- package
- install
- deploy
- -DskipTests #不执行测试用例,但编译测试用例类生成相应的 class 文件至 target/test-classes 下
- -Dmaven.test.skip=true #不执行测试用例,也不编译测试用例类
- Dependency Scope
- compile,缺省值,适用于所有阶段,会随着项目一起发布。
- provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
- runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
- test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
- system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
- 传递依赖和排除依赖
- 传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。
- 如何查看传递依赖:mvn dependency:tree > tree.text
- 排除依赖:如果我们只想下载直接引用的Jar包,那么需要在pom.xml中做以下配置
- 传递依赖:如果我们的项目引用了一个Jar包,而该Jar包又引用了其他Jar包,那么在默认情况下项目编译时,Maven会把直接引用和间接引用的Jar包都下载到本地。
- Maven默认的依赖处理策略是什么?
- 最短路径优先
Maven 面对 D1 和 D2 时,会默认选择最短路径的那个 jar 包,即 D2。E->F->D2 比 A->B->C->D1 路径短 1。 - 最先声明优先
如果路径一样的话, A->B->C1, E->F->C2 ,两个依赖路径长度都是 2,那么就选择最先声明。
- 最短路径优先
- IDEA中使用Maven Helper处理jar包冲突
- Maven常用插件
- 相关资料:《Maven实战》