Maven入门实战笔记03-坐标和依赖

 

坐标

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)编译测试运行例子
compileYYYspring-core
test-Y-JUnit
providedYY-servlet-api
runtime-YYjdbc driver
systemYY-本地的

 

 

 

 

 

 

 

 

 

 

3.传递性依赖

A依赖B,B依赖C,A与B的依赖关系为传递性依赖

4.传递性依赖和依赖范围

A对B的依赖为第一直接依赖范围,B对C的依赖为第二直接依赖范围,A对C的依赖为传递性依赖范围

 compiletestprovidedruntime
compilecompile--runtime
testtest--test
providedprovided-providedprovided
runtimeruntime--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,项目中未使用的,但是显式声明的依赖,对这一类依赖,应仔细分析

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值