首页 > 代码库 > Maven(三)坐标与依赖

Maven(三)坐标与依赖

       Maven的一大功能就是管理项目依赖,为了能自动化地解析任何一个Java构件,Maven就必须将它们唯一标识,这就是依赖管理的底层基础--坐标。下面我们就详细介绍一下Maven里的坐标。

      这里的坐标,显示方式和大家熟悉的平面几何中的坐标(xy)不一样,但是含义是一致的,这也说明了没有新知识,只有不同知识间的相互转化。可以说,任何一个坐标,不管是平面几何中,也可以是一个地址,都是能够唯一标识该平面中的一点。

      相对于平面中的点和城市中的地址,Maven的世界里拥有数量非常巨大的构建,也就是平常使用的jarwar等文件。现在假使没有坐标概念的引入,我们就需要在不同的网站上下载不同的jar包。例如,当需要引入SpringFramework依赖的时候,我们需要去Spring Framework网站寻找并下载,当需要使用log4j依赖的时候,我们又回去Apache网站寻找,这样可想而知,我们需要花费大量的时间在搜索、浏览网页等工作上面。

      没有统一的规范,统一的法则,下载依赖的功能就无法实现自动化。为了解决这个问题,Maven定义了这样一组规范:坐标。坐标的元素主要有:groupIdartifactIdversionpackagingclassifier。一个完整的坐标就可以唯一的确定一个依赖包,只要我们提供正确的坐标元素,Maven就可以从仓库中找到对应的构件供我们使用了。

技术分享

 

      来看一组坐标定义吧:

     <groupId>com.google.code.gson</groupId>

     <artifactId>gson</artifactId>

     <version>2.3.1</version>

     <packaging>jar</packaging>

      Gson 是 Google 提供的用来在Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。

      通过上述坐标定义,大概介绍一下关于坐标各个元素:groupId:定义当前Maven项目隶属的实际项目。而artifactId则是指实际项目中的一个Maven项目(模块)。version顾名思义,就是定义Maven项目当前所处的版本。packaging则是定义了Maven项目的打包方式。

      了解了坐标的定义后,再来看看依赖吧。在pom文件中的依赖配置是由根元素project下的dependencies配置的。

       <dependencies>

		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.3.1</version>
			<packaging>jar</packaging>
		</dependency>

		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>
		<dependency>
			<groupId>com.tgb</groupId>
			<artifactId>itoo-base</artifactId>
			<version>${itoo-base.version}</version>
		</dependency>
	</dependencies>


      说到依赖,不得不说说传递性依赖。什么是传递性依赖呢?举例来说吧:如果不使用Maven,我们手动下载需要的Spring Framework依赖时,由于Spring Framework又会依赖于其他开源类库,因为实际中我们往往还需要下载这些包,这么做就往往引入了很多不必要的依赖。

      Maven的传递性依赖机制就很好的解决了这个问题。它的坐标元素<scope>就定义了依赖的范围(compiletestprovidedruntimesystem等)。上述依赖例子中没有声明依赖范围,那么其依赖范围就是默认的compile。有了传递性依赖机制,在使用Spring Framework的时候就不用去考虑它依赖了什么,也不用担心引入多余的依赖。Maven会解析各个直接依赖的pom,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。

      本篇文章主要介绍了Maven的两个核心概念:坐标与依赖。不知道大家了解了吗?

Maven(三)坐标与依赖