1、Maven坐标 (Coordinates)
1.1 Maven通过坐标来精确定位一个项目。Maven坐标通常用冒号来作为分隔符来书写,像这样的格式:groupId:artifactId:packaging:version。 在pom.xml文件中,它的坐标可以表示为mavenbook:my-app:jar:1.0-SNAPSHOT. 这个符号也适用于项目依赖,我们的项目依赖JUnit的3.8.1版本,它包含了一个 对junit:junit:jar:3.8.1的依赖。
<groupId>com.xbox</groupId>
<artifactId>xbox</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
- groupId 团体,公司,小组,组织,项目,或者其它团体。团体标识的约定是,它以创 建这个项目的组织名称的逆向域名(reverse domain name)开头。来自Sonatype 的项目有一个以com.sonatype开头的groupId,而Apache Software的项目有以 org.apache开头的groupId。
- artifactId 在groupId下的表示一个单独项目的唯一标识符。
- version 一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个 特定的版本。而正在开发中的项目可以用一个特殊的标识,这种标识给版本加上 一个“SNAPSHOT”的标记。
- packaging 项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个 JAR文件,类型为war的项目产生一个web应用。项目的打包格式也是Maven坐标的重要组成部分,但是它不是项目唯一标识符的一个部 分。一个项目的groupId:artifactId:version使之成为一个独一无二的项目;你不能同时有一个拥有同样的groupId, artifactId和version标识的项目。
1.2 Maven仓库的标准是按照下面的目录格式来存储构件,相对于仓库的根目录:
/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
/log4j/log4j/1.2.14/log4j-1.2.14.jar
2、优化和重构POM
2.1 多个模块共用的依赖:将其移动到父POM的<dependencyManagement><dependencies>
2.2 同个pom中依赖版本重复:<properties>创建属性:
2.3 兄弟之间的依赖:
(1)、将它们移到父项目的dependencyManagement中,在最顶层的父项目中定义所有兄弟项目的版本
(2)、使用内建属性org.sonatype.mavenbook和0.6-SNAPSHOT来 解决这个版本问题。由于它们是兄弟依赖,在父项目中枚举它们也不能获得更多的价 值,因此我们依赖于内置的0.6- SNAPSHOT属性。
2.4 为了降低依赖重复而完成的两项优化:
上移共同的依赖至dependencyManagement
如果多于一个项目依赖于一个特定的依赖,你可以在dependencyManagement中 列出这个依赖。父POM包含一个版本和一组排除配置,所有的子POM需要使用groupId和artifactId引用这个依赖。如果依赖已经在dependencyManagement中列出,子项目可以忽略版本和排除配置。
为兄弟项目使用内置的项目version和groupId
使用{project.version}和org.sonatype.mavenbook来引用兄弟项目。兄弟项目基本上一直共享同样的groupId,也基本上一直共享同样的发布版本。使用0.6SNAPSHOT可以帮你避免前面提到的兄弟版本不一致问题。
3、Maven仓库分类
本地仓库:默认在~/user/.../m2/repository/目录下。 在settings.xml文件的<localRepository>F:\Temp\Maven\repository</localRepository> 可以修改本地仓库地址。
远程仓库:又分为
(1)中央仓库:maven在安装的时候,自带的就是中央仓库的配置
(2)私服:nuxus
(3)其它公共库:阿里镜像
仓库检索顺序:当我们在项目中依赖一个jar包时,Maven程序会先去本地仓库中找,如果没找到就回去私服找,如果还是没有,最后就回去中央仓库找。