Maven

一、是什么(What)

1. 构建:把web工程,编译后部署到服务器上的整个过程

2. maven是一个自动化构建工具,服务于Java平台

3. 自动化构建工具的进化:make->Ant->Maven->Gradle

4. 构建的环节:清理clean->编译comple->测试test->打包package->安装install->部署deploy

二、为什么使用Maven(Why)

1. 项目太大,不好拆分

2. 依赖的jar包需要复制粘贴到项目的lib中,需要手动下载和操作

3. jar包可能不一致

4. 依赖jar包的依赖,也要手动添加

三、Maven的作用

1. 项目构建,即自动化地进行编译、测试、部署等操作

2. 依赖管理,自动获取并管理依赖的类库或者框架

四、Maven仓库

1. 中央仓库, 提供公共的镜像地址,所有的组件都发布到上面去,这样构成了一个完整的生态环境,文件管理按坐标中“.”的目录层级

2. 私服,比如Sonatype Nexus,私服地址在settings.xml中的profile中配置,同时可能需要配置servers标签,用于用户名和密码

http://www.blogjava.net/xiaomage234/archive/2014/05/13/413584.html

3. 本地仓库,按目录级别存储,一般都在用户目录.m2下(即maven安装目录下conf/settings.xml的localRepositoty标签配置)

五、安装

1. 安装JDK,配置JAVA_HOME的环境变量

2. 下载解压maven,放在非中文无空格的路径下

3. 配置maven的环境变量

a. windows系统:增加环境变量M2_HOME,路径是maven解压后的根目录,在环境变量path中,增加%M2_HOME%in

b. MAC系统:https://blog.csdn.net/anialy/article/details/22217937

4. mvn -version查看maven版本

六、生命周期(3套)

1. Clean Lifecycle 清理工作

2. Default Lifecycle 核心部分 

a. clean, 清除target

b. validate, 验证工程是否正确

c. compile,编译代码,生成class

d. test, 可选,测试,测试代码不会被打包或者部署

e. package,生成jar,即一个zip压缩文件

f. verify

g. install,拷贝到本地仓库

h. site

i. deploy,上传到远程仓库

3. Site Lifecycle 生成项目报告,发布站点

mvn clean deploy -Dmaven.test.skip 忽略测试代码

七、Maven规则

1. 坐标,用于识别一个依赖,可以映射到仓库路径

<groupId>org.apache</groupId>             // 通常为组织的定义,建议公司域名反过来,如org.apache
<artifactId>commons-lang</artifactId>     // 项目或工程的名称
<version>1.4.1</version>                  // 版本号,1.0 或1.0-SNAPSHOT,稳定版或快照版
<package>jar</package>                    // 默认是jar,也可以是ear/war/pom/apk,实质都是zip包
<scope>compile</scope>                    // 默认compile,可以是compile/runtime/test/provided
 
2.scope依赖范围
a. 默认是compile, 适用于所有阶段,依赖会随着项目一起发布
b. provided,期望别的项目会提供这个依赖
c. test, 测试时使用,不随项目发布,用于编译和测试阶段
d. runtime,运行时使用,用于运行和测试阶段
e. system,不推荐使用,显式指定依赖路径,用于从本地系统找到依赖
 

3. 依赖

a. 在pom.xml文件里,一般先引用父pom,把重复依赖都放父pom里

<parent
    <groupId>com.demo</groupId
    <artifactId>parent-pom</artifactId
    <version>1.0</version
</parent>
 
b. dependency vs dependencyManagement
dependency 真实地下载依赖
dependencyManagement 只是指定了一个规则,不指定version

c. 依赖冲突

用exclusion排除冲突版本

 
 
七、高级特性
1. 依赖传递性
A->B, B->C, 则A->C
 
2. 版本依赖原则

a. 路径最短优先原则: A -> B -> E -> C(1.0),A -> D -> C (2.0),后面的路径较短,选后面那个

b. 声明优先原则: 依赖路径相同时,比如A -> B -> C(1.0),A -> D -> C (2.0),这时路径是相同的,如果pom中B在D前面,就选B依赖的C(1.0)

3. 统一管理依赖的版本号

properties标签

4. 依赖环

A->B->C->A, 但最后一个A不是最新的

原文地址:https://www.cnblogs.com/june0816/p/6270209.html