maven实战笔记-4
2011-04-14 08:29
323 查看
第五章 坐标和依赖
5.2 坐标详解
<groupId>com.wangsy</groupId>
<artifactId>testMVN</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
各个坐标元素:
groupId:定义当前Maven项目隶属的实际项目。首先,Maven项目和实际项目不一定是一对一的关系。其次,groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目。最后,groupId的表示方式与Java包含的表示方式类似,通常与域名反向一一对应。
artifactId:该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。
version:该元素定义Maven项目当前所处的版本。
ackaging:该元素定义Maven项目的打包方式。首先,打包方式通常与所生成构件的文件扩展名对应。其次,打包方式会影响到构建的生命周期。
classifier:该元素用来帮助定义构建输出的一些附属构件。、
上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classifier是不能直接定义的。
5.5 依赖范围
compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。典型的例子是spring-core,在编译、测试和运行的时候都需要使用该依赖。
test:测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子是JUnit,它只有在编译测试代码及运行测试的时候才需要。
provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍。
runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。
system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。但是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。systemPath元素可以引用环境变量,如:
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
import(Maven2.0.9及以上):导入依赖范围。该依赖范围不会对三种classpath产生实际的影响。
依赖范围与classpath[/b]的关系[/b]
[/b]
5.6 传递性依赖
5.6.1 何为传递性依赖
account-mail有一个compile范围的spring-core依赖,spring-core有一个compile范围的commons-logging依赖,那么commons-logging就会成为account-mail的compile范围依赖,commons-logging是account-mail的一个传递性依赖。如下图所示:
![](data:image/png;base64,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)
5.6.2 传递性依赖和依赖范围
5.7 依赖调解
例如,项目A有这样的依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X是A的传递性依赖,但是两条依赖路径上有两个版本的X,那么哪个X会被Maven解析使用呢?两个版本都被解析显然是不对的,因为那会造成依赖重复,因此必须选择一个。Maven依赖调解的第一原则是:路径最近者优先。该例中X(1.0)的路径长度为3,而X(2.0)的路径长度为2,因此X(2.0)会被解析使用。
依赖调解第一原则不能解决所有问题,比如这样的依赖关系:A->B->Y(1.0)、A->C->Y(2.0),Y(1.0)和Y(2.0)的依赖路径长度是一样的,都为2。那么到底谁会被解析使用呢?在Maven2.0.8及之前的版本中,这是不确定的。但是从Maven2.0.9开始,为了尽可能避免构不确定性,Maven定义了依赖调解的第二原则;第一声明者优先。在依赖路径长度相等的前提下,在POM中依赖声明的顺序决定了谁会被解析使用,顺序最靠前的那个依赖优胜。该例中,如果B的依赖声明在C之前,那么Y(1.0)就会被解析使用。
5.8 可选依赖
![](data:image/png;base64,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)
5.9 最佳实践
5.9.1 排除依赖
排除传递性依赖
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wangsy.mvn</groupId>
<artifactId>project-a</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>com.wangsy.mvn</groupId>
<artifactId> project-b</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>com.wangsy.mvn</groupId>
<artifactId> project-c</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.wangsy.mvn</groupId>
<artifactId> project-c</artifactId>
<version>1.1.0</version>
</dependency>
<dependencies>
</project>
上述代码中,项目A依赖于项目B,但是由于一些原因,不想引入传递性依赖C,而是自己显式地声明对于项目C1.1.0版本的依赖。代码中使用exclusions元素声明排除依赖,exclusions可以包含一个或者多个exclusion子元素,因此可以排除一个或者多个传递性依赖。需要注意的是,声明exclusion的时候只需要groupId和artifactId,而不需要version元素,这是因为只需要groupId和artifactId就能唯一定位依赖图中的某个依赖。
![](data:image/png;base64,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)
5.9.2 归类依赖
项目中有很多关于Spring Framework的依赖,它们分别是org.springframework:spring-core:2.5.6、org.springframework:spring-beans: 2.5.6、org.springframework:spring-context:2.5.6和org.springframework:spring-context-support:2.5.6,它们是来自同一项目的不同模块。因此,所有这些依赖的版本都是相同的,而且可以预见,如果将来需要升级Spring Framework,这些依赖的版本会一起升级。
使用常量不仅让代码变得更加简洁,更重要的是可以避免重复,在需要更改的时候,只需要修改一处,降低了错误发生的概率。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wangsy.account</groupId>
<artifactId>account-email</artifactId>
<name>Account Email</name>
<version>1.0.0-SNAPSHOT</version>
<properties>
<springframework.version>2.5.6</springframework.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework </groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework </groupId>
<artifactId>spring-beans</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework </groupId>
<artifactId>spring-context</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework </groupId>
<artifactId>spring-context-support</artifactId>
<version>${springframework.version}</version>
</dependency>
</dependencies>
</project>
5.9.3 优化依赖
查看当前项目的已解析依赖:
mvn dependency:list
查看当前项目的依赖树:
mvn dependency:tree
分析依赖树:
mvn dependency:analyze
本文出自 “代码演绎人生” 博客,请务必保留此出处http://jawsy.blog.51cto.com/752812/544640
5.2 坐标详解
<groupId>com.wangsy</groupId>
<artifactId>testMVN</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
各个坐标元素:
groupId:定义当前Maven项目隶属的实际项目。首先,Maven项目和实际项目不一定是一对一的关系。其次,groupId不应该对应项目隶属的组织或公司。原因很简单,一个组织下会有很多实际项目。最后,groupId的表示方式与Java包含的表示方式类似,通常与域名反向一一对应。
artifactId:该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。
version:该元素定义Maven项目当前所处的版本。
ackaging:该元素定义Maven项目的打包方式。首先,打包方式通常与所生成构件的文件扩展名对应。其次,打包方式会影响到构建的生命周期。
classifier:该元素用来帮助定义构建输出的一些附属构件。、
上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classifier是不能直接定义的。
5.5 依赖范围
compile:编译依赖范围。如果没有指定,就会默认使用该依赖范围。使用此依赖范围的Maven依赖,对于编译、测试、运行三种classpath都有效。典型的例子是spring-core,在编译、测试和运行的时候都需要使用该依赖。
test:测试依赖范围。使用此依赖范围的Maven依赖,只对于测试classpath有效,在编译主代码或者运行项目的使用时将无法使用此类依赖。典型的例子是JUnit,它只有在编译测试代码及运行测试的时候才需要。
provided:已提供依赖范围。使用此依赖范围的Maven依赖,对于编译和测试classpath有效,但在运行时无效。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍。
runtime:运行时依赖范围。使用此依赖范围的Maven依赖,对于测试和运行classpath有效,但在编译主代码时无效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。
system:系统依赖范围。该依赖与三种classpath的关系,和provided依赖范围完全一致。但是,使用system范围的依赖时必须通过systemPath元素显式地指定依赖文件的路径。由于此类依赖不是通过Maven仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该谨慎使用。systemPath元素可以引用环境变量,如:
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${java.home}/lib/rt.jar</systemPath>
</dependency>
import(Maven2.0.9及以上):导入依赖范围。该依赖范围不会对三种classpath产生实际的影响。
依赖范围与classpath[/b]的关系[/b]
[/b]
依赖范围(Scope) | 对于编译 classpath有效 | 对于测试classpath有效 | 对于运行时 有效 | 例子 |
compile | Y | Y | Y | spring-core |
test | — | Y | — | JUnit |
provided | Y | Y | — | servlet-api |
runtime | — | Y | Y | JDBC驱动实现 |
system | Y | Y | — | 本地的,Maven仓库之外的类文件 |
5.6.1 何为传递性依赖
account-mail有一个compile范围的spring-core依赖,spring-core有一个compile范围的commons-logging依赖,那么commons-logging就会成为account-mail的compile范围依赖,commons-logging是account-mail的一个传递性依赖。如下图所示:
5.6.2 传递性依赖和依赖范围
compile | test | provided | runtime | |
compile | compile | — | — | runtime |
test | test | — | — | test |
provided | provided | — | provided | provided |
runtime | runtime | — | — | runtime |
例如,项目A有这样的依赖关系:A->B->C->X(1.0)、A->D->X(2.0),X是A的传递性依赖,但是两条依赖路径上有两个版本的X,那么哪个X会被Maven解析使用呢?两个版本都被解析显然是不对的,因为那会造成依赖重复,因此必须选择一个。Maven依赖调解的第一原则是:路径最近者优先。该例中X(1.0)的路径长度为3,而X(2.0)的路径长度为2,因此X(2.0)会被解析使用。
依赖调解第一原则不能解决所有问题,比如这样的依赖关系:A->B->Y(1.0)、A->C->Y(2.0),Y(1.0)和Y(2.0)的依赖路径长度是一样的,都为2。那么到底谁会被解析使用呢?在Maven2.0.8及之前的版本中,这是不确定的。但是从Maven2.0.9开始,为了尽可能避免构不确定性,Maven定义了依赖调解的第二原则;第一声明者优先。在依赖路径长度相等的前提下,在POM中依赖声明的顺序决定了谁会被解析使用,顺序最靠前的那个依赖优胜。该例中,如果B的依赖声明在C之前,那么Y(1.0)就会被解析使用。
5.8 可选依赖
5.9 最佳实践
5.9.1 排除依赖
排除传递性依赖
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wangsy.mvn</groupId>
<artifactId>project-a</artifactId>
<version>1.0.0</version>
<dependencies>
<dependency>
<groupId>com.wangsy.mvn</groupId>
<artifactId> project-b</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>com.wangsy.mvn</groupId>
<artifactId> project-c</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.wangsy.mvn</groupId>
<artifactId> project-c</artifactId>
<version>1.1.0</version>
</dependency>
<dependencies>
</project>
上述代码中,项目A依赖于项目B,但是由于一些原因,不想引入传递性依赖C,而是自己显式地声明对于项目C1.1.0版本的依赖。代码中使用exclusions元素声明排除依赖,exclusions可以包含一个或者多个exclusion子元素,因此可以排除一个或者多个传递性依赖。需要注意的是,声明exclusion的时候只需要groupId和artifactId,而不需要version元素,这是因为只需要groupId和artifactId就能唯一定位依赖图中的某个依赖。
5.9.2 归类依赖
项目中有很多关于Spring Framework的依赖,它们分别是org.springframework:spring-core:2.5.6、org.springframework:spring-beans: 2.5.6、org.springframework:spring-context:2.5.6和org.springframework:spring-context-support:2.5.6,它们是来自同一项目的不同模块。因此,所有这些依赖的版本都是相同的,而且可以预见,如果将来需要升级Spring Framework,这些依赖的版本会一起升级。
使用常量不仅让代码变得更加简洁,更重要的是可以避免重复,在需要更改的时候,只需要修改一处,降低了错误发生的概率。
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.wangsy.account</groupId>
<artifactId>account-email</artifactId>
<name>Account Email</name>
<version>1.0.0-SNAPSHOT</version>
<properties>
<springframework.version>2.5.6</springframework.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework </groupId>
<artifactId>spring-core</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework </groupId>
<artifactId>spring-beans</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework </groupId>
<artifactId>spring-context</artifactId>
<version>${springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework </groupId>
<artifactId>spring-context-support</artifactId>
<version>${springframework.version}</version>
</dependency>
</dependencies>
</project>
5.9.3 优化依赖
查看当前项目的已解析依赖:
mvn dependency:list
查看当前项目的依赖树:
mvn dependency:tree
分析依赖树:
mvn dependency:analyze
本文出自 “代码演绎人生” 博客,请务必保留此出处http://jawsy.blog.51cto.com/752812/544640
相关文章推荐
- Maven实战学习笔记、7.生命周期和插件
- maven实战笔记-2
- 学习笔记-[Maven实战]-第二章:Maven安装和配置
- maven实战笔记-2
- maven实战笔记-7
- Maven入门实战笔记-11节[7-11]
- maven实战笔记-3
- maven实战的个人笔记(一)
- Maven3实战笔记02坐标和依赖--1
- Maven3实战笔记01环境配置与使用入门
- 《Maven 实战》笔记之setting.xml介绍
- 学习笔记-[Maven实战]-第三章:Maven使用入门(2)
- Maven2 实战笔记一 (安装篇)
- Maven3实战笔记环境配置与使用入门(一)
- maven实战笔记-3
- 学习笔记-[Maven实战]-第三章:Maven使用入门(3)
- 【实战\Java SSM快速开发仿慕课网在线教育平台项目笔记】第1章 课程项目整体概述(整体介绍及Eclipse,Maven,新浪SAE软件平台介绍)
- Maven2 实战笔记二 (构建项目)
- maven实战笔记-4