Maven介绍以及为什么要用Maven

目前掌握的技术

目前的技术在开发中存在的问题

  1. 一个项目就是一个工程

    • 如果项目非常庞大,就不适合继续使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。
    • 借助于Maven就可以将一个项目拆分成多个工程。
  2. 项目中需要的jar包必须手动”复制”、”粘贴” 到WEB-INF/lib目录下

    • 带来的问题是:同样的jar包文件重复出现在不同的项目工程中, 一方面浪费存储空间,另外也让工程.
      比较臃肿。
    • 借助Maven ,可以将jar包仅仅保存在“仓库”中,有需要使用的工程"引用”这个文件接口,并不需.
      要真的把jar包复制过来。
  3. jar包需要别人替我们准备好,或到官网下载

    • 不同技术的官网提供jar包下载的形式是五花八门的,有些技术的官网就是通过Maven或SVN等专门的工具来提供下载的。

    • 如果是以不规范的方式下载的jar包,那么其中的内容很可能也是不规范的。

    • 借助于Maven可以以一种规范的方式下载jar包。因为所有知名框架或第三方工具的jar包以及按照统一的规范存放在了Maven的中央仓库中。

    • 以规范的方式下载的jar包,内容也是可靠的。

    Tips : "统一的规范"不仅是对IT开发领域非常重要,对于整个人类社会都是非常重要的。

  4. 一个jar包依赖的其他jar包需要自己手动加入到项目中

    FileUpload组件→IO组件。 commons-fileupload-1.3.jar依赖于commons-io-2.0.1jar

    如果所有jar包之间的依赖关系都需要程序员自己非常清楚的了解,那么就会极大的增加学习成本,Maven会自动将被依赖的jar包导入进来。

什么是Maven

定义: Maven是一个项目管理工具,它包含了一个项目对象模型(POM: Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

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

    ​ Make→Ant→Maven→Gradle

  2. 构建

    1. 概念:以"Java源文件”、"框架配置文件” 、"JSP” 、“HTML” 、“图片” 等资源为"原材料”, 去“生产”一个可以运行的项目的过程。
      • 编译
      • 部署
      • 搭建
    2. 编译: Java源文件[Userjava]→编译→Class字节码文件[User.class]→交给JVM去执行
    3. 一个B/S项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译的结果”
  3. 构建过程中的各个环节

    1. 清理:将以前编译得到的旧的class字节码文件删除,为下一次编译做准备
    2. 编译:将Java源程序编程成class字节码文件
    3. 测试:自动测试,自动调用junit程序
    4. 报告:测试程序执行的结果
    5. 打包:动态Web.工程打war包, Java工程打jar包
    6. 安装:Maven特定的概念一将打包得到的文件复制到 "仓库”中的指定位置
    7. 部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
  4. 自动化构建

    省略中间编译→打包→部署→测试的重复步骤

Maven的优点

  1. 简化构建过程

    虽然使用 Maven 时偶尔也需要你对底层细节有所了解!但是,Maven 确实屏蔽了很多细节,它已经大大简化了开发人员的工作

  2. 提供统一的构建系统

    Maven 使用项目对象模型(POM)和一组所有项目共享的插件来构建项目,从而提供统一的构建系统。开发人员使用 Maven 构建项目的话,后期维护项目会节省大量时间

  3. 提供优质的项目信息

    Maven 提供了大量有用的项目信息,这些信息部分来自您的POM,部分来自项目源。

  4. 提供最佳实践开发指南

    Maven 会汇总当前最佳开发实践的原则,并通过 Maven 影响其他项目

    Maven还旨在工作流程中协助项目开发,如发布管理和问题跟踪

  5. 允许透明迁移到新功能

    Maven 为 Maven 客户端提供了一种安装更新的简单方法,开发人员可以简单便捷的利用 Maven 的最新特性

    从第三方或 Maven 安装新的插件变得非常的简单

总之,Maven 为我们屏蔽了很多细节。有了 Maven 开发人员的工作就没有那么艰难和繁琐了

Maven如何部署

这段略过了百度就好了

记得idea的设置也要配好

Maven的核心概念

  1. 约定的目录结构
  2. POM
  3. 坐标
  4. 依赖
  5. 仓库
  6. 生命周期、插件、目标
  7. 继承
  8. 聚合

第一个Maven工程

  • 创建约定的目录结构

    1. 根目录:工程名
    2. src目录:源码
    3. pom.xml文件: Maven工程的核心配置文件
    4. main目录:存放主程序
    5. test目录:存放测试程序
    6. java目录:存放Java源文件
    7. resources目录:存放框架或其他工具的配置文件
  • 为什么要遵守约定的目录结构?

    1. Maven要负责我们这个项目的自动化构建,以编译为例, Maven要想自动进行编译,那么它必须知道Java源文件保存在哪里。

    2. 如果我们自己自定义的东西想要让框架或工具知道,有两种办法

      • 以配置的方式明确告诉框架

        <param-value>classpath:springmvc.xml</param-value>
        
      • 遵守框架内部已经存在的约定

        log4j.properties
        

常用Maven命令

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

    ​ 与构建过程相关:编译、测试、打包、…

  2. 常用命令

    1. mvd clean :清理
    2. mvn compile :编译主程序
    3. mvn test-compile :编译测试程序
    4. mvn test :执行测试
    5. mvn package :打包

关于联网问题

  1. Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身
    并不包含在Maven的核心程序中。
  2. 当我们执行的Maven命令需要用到某些插件时, Maven核心程序会首先到本地仓库中查找。
  3. 本地仓库的默认位置: Users[当前登录系统的用户名]\ .m2\repository
  4. Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库下载。
  5. 如果此时无法连接外网,则构建失败。
  6. 修改默认本地仓库的位置可以让Maven核心程序到我们事先准备好的目录下查找插件
    • 找到Maven解压目录\conf\settings.xml
    • 在settings.xml文件中找到localRepository标签
    • <localRepository>/path/to/local/repo</localRepository>从注释中取出
    • 将标签体内容修改为已经准备好的Maven仓库目录

POM

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

​ DOM Document Object Model文档对象模型

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

坐标

数学中的坐标:

  1. 在平面上,使用X、Y两个向量可以唯一的定位平面中的任何一 个点。
  2. 在空间中,使用X、Y、Z三个向量可以唯一的定位空间中的任何于个点。

Maven的坐标

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

groupId:公司或组织域名倒序+项目名

<groupId>com.jin</groupId>

artifactId:模块名

<artifactId>aispringboot</artifactId>

version:版本

<version>1.0-SNAPSHOT</version> //SNAPSHOT是快照的意思,是不稳定的,对应的是RELEASE,稳定的

Maven工程的坐标与仓库中路径的对应关系

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
</parent>

等同

D:\Program Files\Maven\repository\org\springframework\boot\spring-boot-starter-parent\2.2.6.RELEASE

仓库

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

查找依赖信息

https://mvnrepository.com/

猜你喜欢

转载自blog.csdn.net/m0_46108436/article/details/105951753