maven--4.概念(坐标、依赖)

1      坐标

1.1     什么是坐标?

在平面几何中坐标(x,y)可以标识平面中唯一的一点。在maven中坐标就是为了定位一个唯一确定的jar包。

Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范

拥有了统一规范,就可以把查找工作交给机器

     

1.2     Maven坐标主要组成

groupId:定义当前Maven组织名称

artifactId:定义实际项目名称

version:定义当前项目的当前版本

  

 

 

2      依赖管理dependencyManagement

         只声明不引用

 

 

 

3      依赖

3.1     概述

就是对项目中jar 包的管理。可以在pom文件中定义jar包的GAV坐标,管理依赖。

依赖声明主要包含如下元素:


 

<dependencies>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>	
		
	</dependencies>

3.2     范围scope(依赖范围)

其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:

 

1.compile: 默认编译依赖范围(可省略)。对于编译,测试,运行三种classpath都有效

2.test:测试依赖范围。只对于测试classpath有效  junit

3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api    socket-api

4.runtime:运行时提供。例如:jdbc驱动

 

 

3.3     依赖传递

3.3.1   直接依赖和间接依赖

如果B中使用A,C中使用B,则称B是C的直接依赖,而称A是C的间接依赖

C->B          B->A

C直接依赖B

C间接依赖A


3.3.2   依赖范围对传递依赖的影响

中间的交叉单元格表示传递性依赖范围。

 

总结:

Ø  当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。

Ø  当第二直接依赖的范围是test的时候,依赖不会得以传递。

Ø  当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;

Ø  当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;

 

 

3.4     依赖冲突

在maven中存在两种冲突方式:一种是跨pom文件的冲突,一致是同一个pom文件中的冲突。

 

3.4.1   跨pom文件:直接与间接依赖情况

         如果直接与间接依赖中包含有同一个坐标不同版本的资源依赖,以直接依赖的版本为准(就近原则)

 

1、Maven-first工程中依赖log4j-1.2.8版本

那么maven-third中依赖的就是log4j-1.2.8

 

2、maven-second工程中依赖log4j-1.2.9版本

 

那么maven-third中依赖的就是log4j-1.2.9,因为它直接依赖的maven-second项目中依赖的就是1.2.9版本

 

3.4.2   同一个pom文件

         如果直接依赖中包含有同一个坐标不同版本的资源依赖,以配置顺序下方的版本为准(就近原则)

 

Maven-second中依赖log4j-1.2.9和log4j-1.2.14,此时log4j-1.2.14版本生效。

 

 

3.5     可选依赖 -父optional

<optional> true/false 是否可选,也可以理解为是否向下传递。

 

在依赖中添加optional选项决定此依赖是否向下传递,如果是true则不传递,如果是false就传递,默认为false。

 

3.6     排除依赖 -子

<exclusions>
    <exclusion>
       <groupId>cn.itcast.maven</groupId>
       <artifactId>maven-first</artifactId>
    </exclusion>
</exclusions>

排除依赖包中所包含的依赖关系,不需要添加版本号

 

如果在本次依赖中有一些多余的jar包也被传递依赖过来,如果想把这些jar包排除的话可以配置exclusions进行排除。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值