坐标
Maven坐标是用来唯一标识构件的坐标。坐标通过groupId,artifactId,version,packaging,classifier来定义的。其中groupId,artifactId和version是必须的。也可以在<dependencies>下的<dependency>进行定义一个依赖。
* groupId:定义当前Maven项目隶属的实际项目
* artifactId:定义实际项目中的一个Maven项目
* version:定义Maven项目当前所处的版本
* packaging:定义Maven项目的打包方式
* classifier:用来帮助定义构建输出的一些附属构件
且项目构件的文件名与坐标是相对应的,一般规则为artifactId-version[-classifier].packaging。
其他依赖配置
在<dependency>标签下除了定义坐标,还可以定义其它相关的依赖配置。
scope
scope是用来设置依赖范围的,其值有如下:
* compile:编译依赖范围。默认值。在编译、测试和运行都有效
* test:测试依赖范围,测试时有效,例如JUnit
* provided:已提供依赖范围。编译和测试有效
* runtime:运行时依赖范围。测试和运行有效,JDBC驱动实现
* system:系统依赖范围。编译和测试有效。但是其需要通过systemPath元素显式地指定依赖文件地路径
排除依赖
在Maven中,如果你定义了依赖a,如果依赖a需要依赖b,则Maven会自动引入。当然,我们可以用exclusion元素禁止该行为。
<dependencies>
<dependency>
<groupId>com.itheima.mvnbook</groupId>
<artifactId>project-c</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>com.itheima.mvnbook</groupId>
<artifactId>project-c</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.itheima.mvnbook</groupId>
<artifactId>project-c</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
上面地代码中依赖b依赖于c,我们用exclusion进行禁止,然后另外引入自己想要地依赖c版本
归类依赖
可以用properties元素定义Maven属性,用法如下:
<project>
<properties>
<springframework.version>2.5.6</springframework.version>
</properties>
</project>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${springframework.version}</version>
</dependency>
依赖地相关命令
mvn dependency:list
可查看当前项目已解析地依赖
mvn dependency:tree
把已解析地依赖以树地形式进行呈现
mvn dependency:analyze
对当前地依赖进行分析,结果中有一个重要地部分Unused declared dependencies,意思是项目中未使用地,但显示声明的依赖。但是analyze只会分析编译主代码和测试代码需要用到的依赖,一些执行测试和运行时需要的依赖发现不了。还有另一个重要部分Used undeclared dependencies,意思是项目中使用的,但是没有显式声明的依赖。这种依赖容易出现版本自动更改后没有察觉从而耗费时间来查找错误。