首页 > 代码库 > Maven(三)坐标与依赖
Maven(三)坐标与依赖
Maven的一大功能就是管理项目依赖,为了能自动化地解析任何一个Java构件,Maven就必须将它们唯一标识,这就是依赖管理的底层基础--坐标。下面我们就详细介绍一下Maven里的坐标。
这里的坐标,显示方式和大家熟悉的平面几何中的坐标(x,y)不一样,但是含义是一致的,这也说明了没有新知识,只有不同知识间的相互转化。可以说,任何一个坐标,不管是平面几何中,也可以是一个地址,都是能够唯一标识该平面中的一点。
相对于平面中的点和城市中的地址,Maven的世界里拥有数量非常巨大的构建,也就是平常使用的jar、war等文件。现在假使没有坐标概念的引入,我们就需要在不同的网站上下载不同的jar包。例如,当需要引入SpringFramework依赖的时候,我们需要去Spring Framework网站寻找并下载,当需要使用log4j依赖的时候,我们又回去Apache网站寻找,这样可想而知,我们需要花费大量的时间在搜索、浏览网页等工作上面。
没有统一的规范,统一的法则,下载依赖的功能就无法实现自动化。为了解决这个问题,Maven定义了这样一组规范:坐标。坐标的元素主要有:groupId,artifactId,version,packaging,classifier。一个完整的坐标就可以唯一的确定一个依赖包,只要我们提供正确的坐标元素,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>就定义了依赖的范围(compile,test,provided,runtime,system等)。上述依赖例子中没有声明依赖范围,那么其依赖范围就是默认的compile。有了传递性依赖机制,在使用Spring Framework的时候就不用去考虑它依赖了什么,也不用担心引入多余的依赖。Maven会解析各个直接依赖的pom,将那些必要的间接依赖,以传递性依赖的形式引入到当前的项目中。
本篇文章主要介绍了Maven的两个核心概念:坐标与依赖。不知道大家了解了吗?
Maven(三)坐标与依赖