Maven 坐标
能够确定一个点在空间的位置的一个或一组数,叫做这个点的坐标。通常由这个点到垂直相交的若干条固定的直线的距离来表示 。这些直线叫做坐标轴。坐标轴的数目在平面上为二维空间的(x,y),在空间里为三维(x,y,z)。
Maven的核心功能就是管理项目的依赖,引入我们所需的各种jar包等。为了能自动化地解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就是我们要说的坐标。包括我们自己开发的项目,也是要通过坐标进行唯一标识的,这样才能才其它项目中进行依赖引用。
Maven坐标组成
每个构件都有自己的唯一标识(Maven 行话称之为 "唯一坐标" ),由 groupId,artifactId 和 version 等信息构成。
- groupId:当前Maven构件隶属的组织名。groupId一般分为多段,通常情况下,第一段为域,第二段为公司名称。域又分为 org、com、cn 等,其中 org 为非营利组织,com 为商业组织,cn 表示中国。以 apache 开源社区的 tomcat 项目为例,这个项目的 groupId 是 org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artifactId是tomcat。(必须)
- artifactId:项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。(必须)
- version:当前版本。(必须)
- packaging:打包方式,比如 jar,war... (必须)
- classifier:classifier通常用于区分从同一POM构建的具有不同内容的构件。它是可选的,它可以是任意的字符串,附加在版本号之后。
以MyBatis的坐标为例:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
groupId表示组织标识。 groupId定义当前Maven项目隶属的组织机构。举个例子,如果你的公司是mycom,有一个项目为myapp,那么groupId就应该是com.mycom.myapp。groupId的表示方式与Java包名的表示方式类似。
artifactId表示项目名称。该元素定义当前实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名称作为artifactId的前缀。比如上例中的mybatis,mybatis就是实际的项目名称,方便而且直观。在默认情况下,maven生成的构件,会以artifactId作为文件头,如mybatis-3.5.2.jar,使用实际项目名称作为前缀,就能方便的从本地仓库找到某个项目的构件。
version表示项目的当前版本。
补充介绍
packaging表示项目的打包方式。最为常见的jar和war两种,默认是jar。定义Maven项目打包的方式,使用构件的什么包。首先,打包方式通常与所生成构件的文件扩展名对应,如上例中没有packaging,则默认为jar包,最终的文件名为mybatis-3.5.2.jar。
classifier用来帮助定义构建输出的一些附件。附属构件与主构件对应,如上例中的主构件为mybatis-3.5.2.jar,该项目可能还会通过一些插件生成如mybatis-3.5.2-javadoc.jar,mybatis-3.5.2-sources.jar,这样附属构件也就拥有了自己唯一的坐标。
上述5个元素中,groupId、artifactId、version是必须定义的,packaging是可选的(默认为jar),而classfier是不能直接定义的,需要结合插件使用。