您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

Maven基础学习整理

Maven学习

目前掌握的javaweb开发技术

在这里插入图片描述

目前的技术存在的问题–>Maven的产生

  • 一个项目就是一个工程
    如果项目非常庞大,就不适合继续使用package来划分模块。最好是每一个模块对应一个项目,利于分工协作。
    借助于maven就可以将一个项目拆分成多个工程

  • jar包需要别人替我们准备好,或到官网下载
    所有知名框架或第三方工具jar包已经按照统一规范放在了Maven的中央仓库中。

  • 项目中需要的jar包必须手动“复制”、”粘贴” 到WEB-INF/lib 项目下
    带来的问题:同样的jar包文件重复出现在不同的项目工程中,一方面浪费存储空间,另外也让工程比较臃肿。
    借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程“引用”这个文件,并不需要重复复制。

  • 一个jar包依赖的其他jar包需要自己手动加到项目中
    Maven会自动将被依赖的jar包导入进来

Maven是一个软件项目管理的工具

Maven的功能:

  • 改进项目的开发和管理

​ 1 )maven可以管理jar文件

​ 2 )自动下载jar和它的文档、源代码

​ 3 )管理jar的直接依赖,比如 a.jar需要b.jar 则自动下载b.jar

​ 4)管理你所需要的jar版本

​ 5 )帮你编译程序,把java编译为class

​ 6 )帮你测试代码是否正确

​ 7 )帮你打包文件,形成jar文件或war文件

​ 8 )帮你部署项目

构建过程:

  • 项目的构建 构建是面向过程的,就是一些步骤,完成项目代码的编译、运行、测试、打包、部署等等

​ 1)清理:把之前的项目全部清理干净

​ 2)编译,把程序源代码编译为执行代码 java-class文件 这个操作是批量的 而javac的编译是一次编译一个文件

​ 3)测试:maven对代码的测试也是批量的,可以同时执行多个代码,测试多个功能

​ 4)报告:生成测试结果的文件,报告测试是否出现错误

​ 5)打包:将class文件、配置文件压缩为一个文件,java程序通常以jar结尾 web文件以war结尾

​ 6)安装:将5)中的jar或者war文件安装到本机仓库

​ 7)部署:通常是人工部署

Maven前后的工作流程对比

在这里插入图片描述
在这里插入图片描述

Maven核心概念

约定的目录结构:Maven中约定大于配置

在这里插入图片描述

POM(project on object)项目对象模型

  • 是一个文件,文件名为 pom.xml ,Maven把一个项目的内容和结构抽象成一个模型,在xml文件中进行声明,以方便构建和描述,控制maven构建项目的过程,管理jar依赖

​ 1)坐标:唯一值,在互联网中唯一标识一个项目

在这里插入图片描述

3)properties:设置属性

4)build:maven在构建项目时,配置信息,如指定编译java代码使用的jdk版本号

Maven仓库

在这里插入图片描述

①本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
②远程仓库

(1)私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务

(2)中央仓库:假设在Internet上,为全世界所有Maven工程服务
(3)中央仓库镜像:为了分担中央仓库流量,提升用户访问速度

  • 仓库中保存的内容:Maven工程
    ①Maven自身所需要的插件
    ②第三方框架或工具的jar包
    ③我们自己开发的Maven工程

依赖

  • 依赖的范围,默认的依赖范围是compile,除了图中列出的三种依赖,还有runtime、system 和import
    在这里插入图片描述
    比如说servlet-api,在项目运行阶段是由Servlet容器提供的,如果你的范围设置为compile,那就会冲突报错

  • 依赖的传递性
    在这里插入图片描述

  • 依赖的原则

​ 最短路径优先原则:如果A 依赖于B,B 依赖于C,在B 和C 中同时有log4j 的依赖,并且这两个版本不一致,那么A 会根据最短路径原则,在A 中会传递过来B 的log4j版本

​ 路径相同先声明原则:如果在A 同时依赖于B 和C,B 和C 没有依赖关系,并且都有log4j 的依赖,且版本不一致,那么A 会引入在pom.xml 中先声明依赖的log4j 版本

  • 依赖的排除

    这里写图片描述

    <dependency>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>HelloFriend</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>jar</type>
    <scope>compile</scope>
    <exclusions>
        < exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </ exclusion> 
    </exclusions>
    </dependency>
    

    这里写图片描述

生命周期

  • Maven有三套相互独立的生命周期,分别是:
    ①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
    ②Default Lifecycle 构建的核心部分,编译、测试、打包、安装、部署等等。
    ③Site Lifecycle 生成项目报告,站点,发布站点。

继承

聚合

[详情可参考此篇文章]((1条消息) 尚硅谷-Maven学习笔记_无关风月-CSDN博客_maven笔记)

依赖和插件有什么不同?

依赖的话就相当于你用c写代码时候引用的库文件。你之所以引用这些库是因为你需要它里面的函数,需要通过这些函数构建自己的代码。所以最终你调用的库函数成为了你代码的一部分。

插件呢,相当于你用word写文档时候最上面工具栏里面的工具,比如你可以通过‘插入图片’工具往word里面插入一张喜欢的图片。可是插件与你的文本本身不发生任何关系。

回到maven,依赖中被你调用过的函数会与你的代码一起进行编译。对于插件来说呢,比如有些插件是帮助你进行编译工作的,你不用手动写javac一个个去编译。插件就相当于小程序(其实是脚本)。

插件是一种工具,例如compile插件是用来编译代码的工具,mybatis插件是用来自动生成数据库dao和mapper的工具。而依赖则是项目工程在编译过程中需要依赖的二方及三方包。在你的工程中可以不需要mybatis插件,自己去实现sql的crud,但如果工程里需要三房包,则必须要用dependency引入。
参考:
[详情可参考此篇文章]((1条消息) 尚硅谷-Maven学习笔记_无关风月-CSDN博客_maven笔记)


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进