Maven为所有的项目引入了坐标,基于坐标机制可以唯一定位一个项目。
坐标详解
以spring-core-2.5.6.jar的坐标定义为例,说明组成坐标的所有元素:groupId、artifactId、version、packaging、classifier。如下所示:
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<packaging>jar</packaging>
<version>2.5.6</version>
groupid: 定义当前Maven项目所属的实际项目。因为很多时候,一个实际的项目很可能有多个模块组成,例如org.springframework项目就有spring-core、spring-beans、spring-context等模块。
artifactId: 定义当前Maven项目在所属实际项目中的具体模块名称。如spring-core为该具体模块的名称。
version: 定义Maven项目当前的版本。
packaging: 打包方式,包括jar、war、pom等。
classifier: 定义构建输出的一些附属构建。例如,我们生成了一个构建a.jar,我们希望在构建的时候也能生成一个与a.jar对应的其源码jar包,为a-sources.jar。则a-sources.jar即为附属构建,sources就是该附属构建的classifier。需要注意的是:不能在项目中直接定义classifier,因为附属构建不是默认生成的,需要附加的插件才能生成。请参考: Maven中maven-source-plugin,maven-javadoc-plugin插件的使用:
依赖配置
在pom文件中按照坐标机制配置该项目对其他构件的依赖,配置语句如下所示:
其中groupId、artifactId、version三个参数是必须的,type相当于坐标中的packaging,scope参数用来确定所依赖的构建的依赖范围,exclusions参数用来排除依赖中的传递性依赖。
<project>
.....
<dependencies>
<dependency>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<type>...</type>
<scope>...</scope>
<optional>...</optional>
<exclusions>
<exclusion>...</exclusion>
</exclusions>
</dependency>
.....
</dependencies>
.....
</project>
关于Maven依赖管理的其他知识,请参考大神徐晓斌的博客文章:Maven最佳实践:管理依赖