Maven坐标

坐标简介

每个maven项目都有一个坐标
groupId + artifactId + version + packaging + classifier,五个维度的坐标,唯一定位一个依赖包
任何一个项目,都是用这五个维度唯一定位一个发布包
实际上后面两个维度较为少用,99%的场景下,唯一定位一个依赖的就是三个维度,groupId + artifactId + version
几乎所有你需要使用的依赖包的各个版本,都在maven的中央仓库里
简单来说,就是在pom.xml里配置你需要的依赖的坐标,然后maven自动从中央仓库下载后缓存到你本地仓库里
打包的时候,可以通过插件直接将本地仓库中的依赖打入你的jar包中,形成一个完整可用的发布包
而我们自己的maven项目,也可能要发布到maven仓库中,给别的项目使用,因此maven是强制性要求每个项目都要定义一个坐标的

企业级的坐标设置

groupId

不是你的公司或者组织,但是以你的公司或者组织的官网的域名倒序来开头,然后加上项目名称
比如说,你现在在百度公司,www.baidu.com,公司里任何一个项目的开头,就可以用com.baidu来打头
或者说,你在阿里巴巴,www.alibaba.com,公司里任何一个项目的开头,就是可以用com.alibaba来打头
然后你可能会说,我的公司有点low,连域名都没有,网站都没有,比如你的公司叫中华石杉,没有网站,一般是这样,国内会用自己公司名字的拼音的缩写,或者是公司名称的英文的简写,加上com来组成groupId,com.zhss

artifactId

项目中的某个模块,或者某个服务
一般在一个大项目最终会打成一个war包,可能里面有几十个工程组成,上百万行代码,发布到一个tomcat里面去。一个一个的模块,每个模块基本就是一个工程,最终各个工程会被打到一个war包里去而已。artifactId就是这个项目里的某个模块
com.zhss.oa,oa-organ,organ是缩写,organization com.zhss.oa,oa-auth,auth是authorization com.zhss.oa,oa-flow,flow就是流程的意思
我们会发现,一个系统不是由多个模块组成了,不是最终打成一个war包发布。一个系统是由多个服务组成,artifactId就变成了服务的名称。
com.zhss.oa,oa-organ服务 com.zhss.oa,oa-auth服务 com.zhss.oa,oa-flow服务
比如我们刚才写的第一个maven工程,就是个hello world工程,所以artifactId就是hello-world
 

version

工程的版本号
1.0.0-SNAPSHOT版本,
  • 第三位是最小版本,一般如果是修复一些bug,或者作出轻微的改动,会累加第三位小版本;
  • 第二位是小版本,一般如果加入一些新的功能或者模块,或者做了一些重构,会累加第二位小版本
  • 第一位是大版本,一般就是如果整体架构有特别的升级或者变化,才会累加第一位大版本
SNAPSHOT,就是当前这个版本下的快照版本,代表代码正在开发或者测试中,可以试用,但是没有经过完善测试,不会承诺非常稳定
如果没有SNAPSHOT,那么就是说已经经过完善测试,是可以发布的稳定版本

packaging

这个工程的发布包打包方式,一般常用的就jar和war两种,java -cp执行一个jar包,war可以放到一个tomcat容器里去跑的web工程

classifier

很少用,定义某个工程的附属项目,比如hello-world工程的,hello-world-source工程,就是源码,可能是类似于hello-world-1.0-SNAPSHOT-source.jar这样的东西。
 

设置坐标的作用

一个groupId+artifactId+version,就定位了这个项目某个时间点的一个特定版本的代码,也就是一个特定的版本的代码的jar包。
然后呢在maven世界里,特别是开源的那些项目,junit,spring,mybatis,都是在每个版本的代码开发好之后,设置好对应版本的坐标,主要是version。然后将这个版本的代码的jar包,上传到maven的中央仓库。供其他任何人来使用这个版本的代码的jar包。
然后,我们在自己的maven项目里,就可以通过<dependency>加上那个依赖的坐标,groupId+artifactId+version,去声明我要用那个依赖的哪个版本的代码的jar包。
maven通过这个坐标唯一定位到那个项目的那个版本的代码的jar包。从中央仓库下载下来,给你放到本地仓库里去。
然后,你自己的maven项目为什么也要一个坐标,因为可能你写好了一个模块之后,你就会需要将这个版本的代码打成一个jar包,放到仓库里去,给公司里其他人去依赖和使用。只有你也有一个坐标,才能让别人唯一定位你的项目某个版本的代码的jar包,让maven下载了之后给别人用。