关于坐标(Coordinate),大家最熟悉的定义应该来自于平面几何。在一个平面坐标系中,坐标(x,y)表示该平面上与x轴距离为y,与y轴距离为x的一点,任何一个坐标都能够唯一标识该平面中的一点。
在实际生活中,我们也可以将地址看成是一种坐标。省、市、区、街道等一系列信息同样可以唯一标识城市中的任一居住地址和工作地址。邮局和快递公司正是基于这样一种坐标进行日常工作的。
对应于平面中的点和城市中的地址,Maven的世界中拥有数量非常巨大的构件,也就是平时用的一些jar、war等文件。在Maven为这些构件引入坐标概念之前,我们无法使用任何一种方式来唯一标识所有这些构件。因此,当需要用到Spring Framework依赖的时候,大家会去Spring Framework网站寻找,当需要用到log4j依赖的时候,大家又会去Apache网站寻找。又因为各个项目的网站风格迥异,大量的时间花费在了搜索、浏览网页等工作上面。没有统一的规范、统一的法则,该工作就无法自动化。重复地搜索、浏览网页和下载类似的jar文件,这本就应该交给机器来做。而机器工作必须基于预定义的规则,Maven定义了这样一组规则:世界上任何一个构件都可以使用Maven坐标唯一标识,Maven坐标的元素包括groupId、artifactId、version、packaging、classifier。现在,只要我们提供正确的坐标元素,Maven就能找到对应的构件。比如说,当需要使用Java5平台上TestNG的5.8版本时,就告诉Maven:“groupId=org.testng;artifactId=testng;version=5.8;classifier=jdk15”,Maven就会从仓库中寻找相应的构件供我们使用。也许你会奇怪,“Maven是从哪里下载构件的呢?”答案其实很简单,Maven内置了一个中央仓库的地址(http://repo1.maven.org/maven2),该中央仓库包含了世界上大部分流行的开源项目构件,Maven会在需要的时候去那里下载。
在我们开发自己项目的时候,也需要为其定义适当的坐标,这是Maven强制要求的。在这个基础上,其他Maven项目才能引用该项目生成的构件,见图5-1。
图5-1 坐标为构件引入秩序