1.坐标,就是构件(各种jar包)的地址
2.坐标元素:
groupId:定义当前Maven项目隶属的实际项目,类似于java的包名,如com.iteye.ln-ydc.mvndemo(com.iteye.ln-ydc是组织名,mvndemo是实际项目名)
artifactId:定义实际项目中的一个Maven项目(模块)
version:定义Maven项目当前所处的版本
packaging:定义Maven项目的打包方式,默认为jar
classifier:帮助定义构建输出的一些附属构件
注:1.groupId、artifactId、version必须定义,packaging可选,classifier不能直接定义
2.项目构件的文件名是与坐标相对应的,一般规则:artifactId-version[-classifier].packaging
-------------------------------------------------------------------------
1.依赖范围
compile:编译
test:测试
provided:已提供依赖范围(对编译和测试classpath有效)
runtime:运行时
system:系统
import:导入
2.依赖范围与classpath的关系
依赖范围(scope) | 编译 | 测试 | 运行 | 例子 |
compile | Y | Y | Y | spring-core |
test | - | Y | - | JUnit |
provided | Y | Y | - | servlet-api |
runtime | - | Y | Y | jdbc driver |
system | Y | Y | - | 本地的 |
3.传递性依赖
A依赖B,B依赖C,A与B的依赖关系为传递性依赖
4.传递性依赖和依赖范围
A对B的依赖为第一直接依赖范围,B对C的依赖为第二直接依赖范围,A对C的依赖为传递性依赖范围
compile | test | provided | runtime | |
compile | compile | - | - | runtime |
test | test | - | - | test |
provided | provided | - | provided | provided |
runtime | runtime | - | - | runtime |
5.依赖调解
原则一:路径近者优先,如A->B-C->X(1.0)、A->D->X(2.0),X(2.0)会被解析使用
原则二:第一声明者优先,依赖路径长度相同,先声明者优先
6.可选依赖
A依赖于B,B依赖于X(可选),B依赖于Y(可选),即A->B,B->X(可选),B->Y(可选)
由于X、Y是可选依赖,依赖将不会得以传递
例如:B有两个特性X和Y,且这两个特性互斥,如B支持MySQL和Oracle两种数据库,因此,当项目A依赖于项目By时,如果实际使用基于MySQL数据库,那么在项目A中就需要显式地声明mysql-connector-java这一依赖
在理想情况下,是不应该使用可选依赖的
使用可选依赖,是某一个项目实现了多个特性
单一职责原则,一个类就该只有一项职责
7.最佳实践
1.排除依赖,不稳定的版本要排除,声明稳定的版本
2.归类依赖,对于一类依赖的版本进行统一定义
3.优化依赖,以下命令参考Maven入门实战笔记02中的相关命令
mvn dependency:list mvn dependency:tree mvn dependency:analyze
used undeclared dependencies ,项目中使用到,但是没有显式声明的依赖,这种依赖存在潜在的风险
显式声明 任何项目中直接用到的依赖
unused declared dependencies,项目中未使用的,但是显式声明的依赖,对这一类依赖,应仔细分析
相关推荐
NULL 博文链接:https://ln-ydc.iteye.com/blog/1825185
maven-archetype-webapp-1.0.jar,下载,如果有需要的同志可以自己下载,。
maven-resources-plugin-2.4.1.jar
Maven3实战笔记04——Maven的生命周期和插件。
解决Unable to create project from archetype [org.apache.maven.archetypes:maven-archetype-quickstart:1.1] 1. 下载maven-archetype-quickstart-1.1.jar 文件地址: 2.cmd窗口执行mvn install:install-file -...
java运行依赖jar包
在apache-maven-3.5.2/conf/setting.xml中加入以下配置即可解决 alimaven aliyun maven http://maven.aliyun.com/nexus/content/repositories/central/ central junit junit Address/ ...
Maven3实战笔记——03Maven仓库。
Maven3实战笔记(整合)
java运行依赖jar包
mybatis-plus-generator-maven-plugin-v1.0.0依赖的pom.xml,用于mybatis-plus-generator-maven-plugin-1.0.0.jar本地仓库上传时依赖使用
Maven3实战笔记 Maven3实战笔记 Maven3实战笔记 Maven3实战笔记
【在本地库中装载maven-archetype-quickstart】 1. 下载该文件 2. 打开cmd窗口,执行mvn install:install-file -DgroupId=org.apache.maven.archetypes -DartifactId=maven-archetype-quickstart -Dversion=1.1 -...
Maven3实战笔记07——继承的介绍。
java运行依赖jar包
- [一、Maven简介和快速入门](#一Maven简介和快速入门) - [1.1 Maven介绍](#11-Maven介绍) - [1.2 Maven主要作用理解](#12-Maven主要作用理解) - [1.3 Maven安装和配置](#13-Maven安装和配置) - [二、基于IDEA的...
maven-antrun-plugin-1.3.jar maven-antrun-plugin-1.3.jar maven-antrun-plugin-1.3.jar
Maven3实战笔记05——仓库依赖解析与插件解析。
Maven3实战笔记06——聚合的介绍。
java运行依赖jar包