Fork me on GitHub

Maven

注意:所有文章除特别说明外,转载请注明出处.

Maven

一、什么是Maven

1、 Maven是一款服务于Java平台的自动化构建工具

​ 发展历史: Make -> Ant -> Maven -> Gradle

​ 项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。

二、为什么要使用Maven

2.1 不使用Maven开发存在的问题

  1. 一个项目就是一个工程
  2. 项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下
  3. 项目中所需要的jar包都是必须是提前下载好的
  4. 项目中一个jar包所依赖的其他jar包必须手动导进来

2.2 Maven 的优点

1、原来的项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下,而借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程只需要“引用”这个文件,并不需要重复复制到工程中。
2、原来的项目中所需要的jar包都是提前下载好的,而Maven在联网状态下会自动下载所需要的jar包。首先在本地仓库中找,找不到就在网上进行下载。
3、原来的项目中一个jar包所依赖的其他jar包必须手动导进来,而Maven会自动将被依赖的jar包导进来。
4、原来的项目一个项目就是一个工程,而借助Maven可以将一个项目拆分成多个工程。

三、Maven 构建过程的环节

1、清理:将以前的编译得到的旧的class字节码文件删除

2、编译:将Java源程序编译为class字节码文件

3、测试:自动测试,自动调用 junit 程序

4、报告:测试程序执行的结果

5、打包:动态web工程打 war 包, Java工程打 jar 包

6、安装:Maven特定的概念——将打包得到的文件复制到 “仓库” 中指定的位置

7、部署:将动态生成的 war 包复制到 Servlet 容器指定的目录下,使其可以正常运行

四、Maven 的核心概念

4.1 约定的目录概念(一般)

4.1.1 约定的目录结构:

1
2
3
4
5
6
7
[1] 根目录:工程名
[2] src目录:源码
[3] pom.xml 文件: Maven 工程的核心配置文件
[4] main 目录: 存放主程序
[5] test 目录: 存放测试程序
[6] java 目录: 存放Java 源文件
[7] resources 目录: 存放框架或者其他工具的配置文件

4.1.2 为什么要使用约定的目录文件:

  • Maven 要负责我们这个项目的自动化构建,以编译为例,Maven 想要自动进行构建,那么他必须知道Java的源文件保存在哪里
  • 如果想要我们自定义的东西被框架或者是工具知道。(配置文件)

4.2 POM(一般)

​ 含义:Project Object Model 项目对象模型

​ POM.xml 是 Maven 工程的核心配置文件,与构建过程相关的一切设置都在这个文件之中进行配置。重要程度相当于 web.xml 对于动态web工程。

4.3 坐标(一般)

​ 4.3.1 数学中的坐标:

​ [1] 在平面或者空间上 使用 x,y,z,来确定平面或者空间之中的任何一个点。

​ 4.3.2 Maven 中的坐标:

​ 使用下面三个向量在仓库之中唯一定位一个Maven工程。

(==G==)groupid:公司或者组织域名倒序 + 项目名
1
<groupId>org.springframework</groupId>
​ (==A==)artifactid: 模块名
1
<artifactId>spring-web</artifactId>
​ (==V==)version: 版本信息
1
2
3
4
<version>5.0.8.RELEASE</version>

文件路径:
org\springframework\spring-web\5.0.8.RELEASE\spring-web-5.0.8.RELEASE.jar

4.4 依赖(重要)

4.4.1 依赖解析:

​ Maven 解析依赖信息时,会到本地仓库之中查找被依赖的jar包。

​ 对于我们自己开发的 Maven 工程,使用 ==mvn install == 命令安装之后就可以进入仓库。

4.4.2 依赖的范围:

  • compile

    • 对主程序是否有效: 有效
    • 对测试程序是否有效: 有效
    • 是否参与打包: 参与
  • test

    • 对主程序是否有效: 无效
      • 对测试程序是否有效: 有效
      • 是否参与打包: 不参与
  • provided

    • 对主程序是否有效: 有效
      • 对测试程序是否有效: 有效
      • 是否参与打包: 不参与
      • 是否参与部署: 不参与

        4.4.3 依赖的传递性

​ 【1】好处:可以传递的依赖不必在每个工程模块之中都重复声明。只需要在‘最下面“声明一次即可。

​ 【2】注意:非 compile 范围的依赖无法传递。

4.4.4 依赖的排除

​ 【1】 需要依赖排除的场合

​ 不稳定的jar包,不想让他加入到工程之中。

​ 【2】如何排除(以排除AAAA为例)

1
2
3
4
5
6
<exclusions>
<exclusion>
<groupId>AAAAAAAAA</groupId>
<artifactId>AAAAA</artifactId>
</exclusion>
</exclusions>

4.4.5 依赖的原则:

​ 【1】 路径最短者优先

​ 【2】 路径相同者先声明者优先

4.4.6 统一管理依赖的版本

​ 假设Spring 的 jar 包的依赖版本都是 4.0.0, 此时想要统一升级成为 4.1.1 怎么办?

​ 【1】 手动逐一修改,不可靠

​ 【2】 建议配置方式:

​ i:使用 properties 标签统一声明版本号

1
2
3
4
5
6
7
8
9
<properties>
<spring.version>5.0.8.RELEASE</spring.version>
</properties>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>

4.5 仓库(了解)

​ Maven 仓库分为:

  • 本地仓库
    • 当前电脑上部署的仓库目录,为当前电脑上的所有Maven工程服务
  • 远程仓库
    • 私服:搭建在局域网上面的Maven仓库,为当前局域网范围内的所有 Maven 工程服务。
    • 中央仓库:架设在 Internet 之中,为全世界的 Maven 工程服务。
    • 中央仓库镜像: 为了分担中央仓库的流量,提升用户访问速度。
      • 仓库之中保存了什么?
  • Maven 自身需要的插件
  • 第三方工具或者工具的jar包
  • 我们自己开发的Maven工程

4.6 生命周期/插件/目标(了解)

4.7 继承(了解)

4.8 聚合(了解)

五、Maven 常用命令:

5.1 命令使用范围:

执行与构建相关的 Maven 命令,必须进入 pom.xml 所在的目录。

==5.2 常用命令==

1. mvn clean: 清理

2. mvn compile : 编译主程序

3.mvn test-compile :编译测试程序

4. mvn test : 执行测试

5. mvn package: 打包

6. mvn install :将自己的 jar 包加入到本地仓库之中

六、Maven 生命周期:

​ 1、各个构建环节的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。

​ 2、Maven 的核心程序定义了抽象的生命周期,生命周期的各个阶段的具体任务是由插件来完成的。

​ 3、Maven 的核心程序为了更好地实现自动化构建,按照这一特点执行生命周期之中的各个阶段,不论要执行那个阶段,都是从这个生命周期的最初的位置开始执行的

本文标题:Maven

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月30日 - 08:07:06

原始链接:http://bangjinhu.github.io/undefined/Maven/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.