Maven坐标是Maven用来表示一个组件依赖的标示。
Maven
经过下面几个元素定义坐标:groupId、artifactId、version、packaging、classifier
.java
groupId
:定义当前Maven
项目隶属的实际项目。不该该是组织或公司(一个公司有不少项目,每一个项目有不少模块)。apache
artifactId
:定义实际项目的一个Maven
模块,推荐使用实际项目名称做为前缀。服务器
version
:定义Maven
项目当前所处的版本。网络
packaging
:定义Maven
项目的打包方式,可选的有:jar
(默认)、war
、pom
,不一样的打包方式会影响构建的生命周期。maven
classifier
:定义构建输出的一些附属构建,如javadoc
、sources
。布局
Maven
坐标是一个构件的逻辑表示,构件的物理表示是文件,Maven
经过仓库来统一管理这些文件。ui
得益于坐标机制,Maven
项目可以以统一的方式来使用任何构件,在此基础上,Maven
能够在某个位置统一存储全部Maven
项目共享的构建,这个统一位置就是仓库。阿里云
Maven
中的仓库分为:本地仓库和远程仓库。url
Maven根据坐标寻找构件时,先查看本地仓库是否存在该构件,存在则直接使用;不然就查找远程仓库,找到以后就下载到本地仓库;本地和远程都没找到,直接报错。代理
中央仓库是Maven
核心自带的远程仓库,含绝大多数开源的构件;
私服是在局域网搭建的仓库服务器,用于代理外部的远程仓库,能够节省带宽和时间,内部的项目还能部署到私服供其余项目使用;使用私服能够加速Maven构建以及提升稳定性,内网访问不须要依赖于网络。
其余公共服,如阿里云等。
本地仓库:配置路径${M2_HOME}/conf/settings.xml
,默认是${user.home}/.m2/repository
.
构件进入本地仓库有两种方式:Maven
从远程仓库下载到本地仓库;经过在项目执行mvn install
安装到本地。
对Maven
而言,用户的本地仓库只有一个,但能够配置访问不少远程仓库。而中央仓库是默认的远程仓库,在$M2_HOME/lib/maven-model-builder-{version}.jar
的org/apache/maven/model/pom-4.0.0.xml
文件定义了,该POM
也被称为超级POM
。
构件在Maven仓库里的存储路径为:{groupId}/{artifactId}/{version}/{artifactId-version.packaging}
经过POM
文件的<repositories><repository>
元素能够配置远程仓库,如:
<repositories> <repository> <id>jboss</id> <name>jboss repository</name> <url>http://repository.jboss.com/maven2/</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> <layout>default</layout> </repository> </repositories>
相比于发布版本,快照版本还有下面两个属性:
<snapshots> <enabled>true</enabled> <updatePolicy>daily</updatePolicy> <checksumPolicy>ignore</checksumPolicy> </snapshots>
daily
,可选择有
never
、
always
、
interval:X
(X分钟检查一次)。
Maven
检查校验和的策略,默认值是
warn
(校验不经过时警告),可选择还有
fail
(校验不经过时构建失败)、
ignore
(忽略校验错误)
若是仓库X能够提供仓库Y存储的全部内容,则认为X是Y的一个镜像。关于镜像的配置能够在${M2_HOME}/conf/settings.xml
中进行配置:
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>
Remark:因为镜像仓库彻底屏蔽了被镜像仓库,当镜像仓库不稳定或者中止服务时,Maven仍将没法访问被镜像仓库,于是将没法下载构件。