1、maven坐标简介
每个maven项目都有一个坐标
groupId + artifactId + version + packaging + classifier 这五个维度的坐标可以唯一确定一个依赖包,任何一个项目都是用这五个坐标唯一定位到一个发布包。
实际生产中用的最多的是groupId + artifactId + version这三个维度,后面两个维度99%的情况下用不到。
我们需要在pom.xml里配置需要的依赖的坐标,然后maven会自动从中央仓库下载后缓存到本地仓库里。
打包的时候,可以通过插件直接将本地仓库中的依赖打入jar包中,形成一个完整可用的发布包
由于我们自己的maven项目有时候也可能要发布到maven仓库中给别的项目使用,因此maven是强制性要求每个项目都要定义一个坐标。
2、企业级坐标设置
groupId:以公司或者组织的官网的域名倒序来开头,然后加上项目名称。
以百度公司为例,www.baidu.com,公司里任何一个项目的开头,就可以用com.baidu来打头。
以阿里巴巴为例,www.alibaba.com,公司里任何一个项目的开头,就是可以用com.alibaba来打头。
若所在公司没有域名,可以用公司名字的拼音的缩写,或者是公司名称的英文的简写,加上com来组成groupId。
artifactId:项目中的某个模块,或者某个服务
一般一个大项目最终会打成一个war包,里面可能由几十个工程组成,上百万行代码,发布到一个tomcat里面去。一个一个的模块,每个模块基本就是一个工程,最终各个工程会被打到一个war包里去而已。artifactId就是这个项目里的某个模块
如下所示前面为groupId,后面为artifactId对应的就是一个项目里面的各个模块。
com.baidu.oa,oa-organ,organ是缩写,organization
com.baidu.oa,oa-auth,auth是authorization
com.baidu.oa,oa-flow,flow就是流程的意思
若一个系统不是由多个模块组成,并且最终不是打成一个war包发布。而是由多个服务组成,此时artifactId就变成了服务的名称。
com.baidu.oa,oa-organ服务
com.baidu.oa,oa-auth服务
com.baidu.oa,oa-flow服务
version:这个工程的版本号,后面会讲到到底怎么用
packaging:这个工程的发布包打包方式,一般常用的就jar和war两种,java -cp执行一个jar包,war可以放到一个tomcat容器里去跑的web工程
classifier:很少用,定义某个工程的附属项目,比如hello-world工程的,hello-world-source工程,就是源码,可能是类似于hello-world-1.0-SNAPSHOT-source.jar这样的东西。
3、坐标的作用?
每一次一个工程写好了,都有版本,groupId+artifactId+version就成了这一次这个工程目前这个状态的唯一的标识和定位。
一个groupId+artifactId+version,就定位了这个项目某个时间点的一个特定版本的代码,也就是一个特定的版本的代码的jar包。
在maven世界里,特别是开源的那些项目。比如junit,spring,mybatis,都是在每个版本的代码开发好之后,设置好对应版本的坐标,主要是version。然后将这个版本的代码的jar包,上传到maven的中央仓库。供其他任何人来使用这个版本的代码的jar包。
因此在自己的maven项目里,我们就可以通过加上那个依赖的坐标,groupId+artifactId+version,去声明我要用那个依赖的哪个版本的代码的jar包。maven通过这个坐标唯一定位到那个项目的那个版本的代码的jar包。从中央仓库下载下来,给你放到本地仓库里去。
我们自己的maven项目为什么也要一个坐标,因为可能你写好了一个模块之后,你就会需要将这个版本的代码打成一个jar包,放到仓库里去,给公司里其他人去依赖和使用。只有你也有一个坐标,才能让别人唯一定位你的项目某个版本的代码的jar包,让maven下载了之后给别人用。