maven的那些事儿~~~想要学会maven,看这篇文章就够了!

简介

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

  • 我们为什么要使用Maven?[why]

    目前的技术在开发中存在的问题:
    1.一个项目就是一个工程:如果项目非常庞大,就不适合继续使用package来划分模块。
    2.项目中需要的jar包必须手动 “复制”,“粘贴” 到WEB-INF/lib目录下。
    3.jar包需要别人替我们准备好,或者到官网下载。
    4.一个jar包依赖的其他jar包需要自己手动加入到项目当中。
    使用maven来构建项目的好处:
    1.借助Maven可以以一种规范的方式下载jar包。一位内所有知名框架或第三方工具的jar包已经按照统一的规范存放在了maven的中央仓库中。
    2.以规范的方式下载的jar包,内容也是可靠的。
    3.只需很少或不需要额外配置即可即时访问新功能
    4.卓越的依赖管理,包括自动更新,依赖关闭(也称为传递依赖)。
    5.一个庞大且不断增长的库和元数据库,可以立即使用,并与最大的开源项目仓库一起,以实现最新版本的实时可用性。

二.Maven是什么?[what]
1.Maven是一款服务于Java平台的自动化构建工具。
2.构建:
【1】概念 :以“java源文件”、“框架配置文件”、“html”等资源为原材料,去生产一个可以运行项目的过程。
【2】编译: Java源文件-编译-class字节码文件-交给JVM去执行。
【3】部署: 一个BS项目最终目的不是动态Web工程本身,二十这个动态Web工程的编译结果。
3.构建过程中的各个环节:
【1】清理: 将以前编译得到的旧的class字节码文件删除,为下一次编译作准备。
【2】编译: 将java源程序编译成class字节码文件。
【3】测试: 自动测试,自动调用junit程序来进行测试。
【4】报告: 测试程序执行的结果。
【5】打包: 动态Web工程打war包,Java工程打jar包。
【6】安装: Maven特定的概念–将打包得到的文件复制到"仓库"中的指定位置。
【7】部署: 将jar包复制到tomcat容器的指定目录下,使其可以运行。

三.Maven如何使用?[how]

  • 1.约定的目录结构:
hello
|---src
|---|---main
|---|---|---java
|---|---|---resources
|---|---test
|---|---|---java
|---|---|---resources
|---pom.xml

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

我们为什么要遵守约定的目录结构呢?
1.Maven要负责我们项目的自动化构建,以编译为例,Maven要想自动进行编译,那么它必须知道Java源文件保存在哪里
2.如果我们自定义的东西想要让框架或者工具知道,有两种办法,要么以配置的方式明确的告诉框架,要么就遵守框架内部已经存在的约定

  • 2.pom
    ①含义:Project Object Model项目对象模式
    ②pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置,重要程度相当于web.xml对于动态web工程的重要性

  • 3.坐标
    ①数学中的坐标:
    [1]在平面上,使用X,Y两个向量可以唯一定位平面中任何一个点
    [2]在空间中,使用X,Y,Z三个向量可以唯一定位空间中任何一个点
    ②Maven的坐标:
    使用下面三个向量在仓库中唯一定位一个Maven工程:gavm—Maven坐标
    [1]groupId:公司或者组织域名倒序+项目名

<groupId>com.dbright.totalproject</groupId>

[2]artifactId:模块名

<artifactId>DBrightFramework-TotalProject</artifactId>

[3]version:版本

<version>1.0-SNAPSHOT</version>

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

<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,      
如com.winner.trade,maven会将该项目打成的jar包放本地路径:/com/winner/trade -->      
<groupId>com.dbright.totalproject</groupId>    
<!-- 本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->    
<artifactId>DBrightFramework-TotalProject</artifactId>    
<!-- 本项目目前所处的版本号 -->    
<version>1.0-SNAPSHOT</version>
  • 4.依赖
    ①Maven解析依赖时会到本地仓库中查找被依赖的jar包
    对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库
    ②依赖的范围
    [1]compile范围依赖
    对主程序是否有效:有效
    对测试程序是否有效
    是否参与打包:参与
    [2]test范围依赖
    对主程序是否有效:无效
    对测试程序是否:有效
    是否参与打包:不参与
    [3]provided范围依赖(通常是在web工程中添加的)
    对主程序是否有效:有效
    对测试程序是否:有效
    是否参与打包:不参与
    是否参与部署:不参与
    ③依赖的传递性:
    在这里插入图片描述
   <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>${fastjson.version}</version>
    <scope>compile</scope>
   <pendency>

[1]好处:可以传递的依赖不必在每个模块中都重复声明,在父级工程中依赖一次即可.
[2]注意:只有compile范围的依赖可传递
④依赖的排除:
[1]需要设置依赖排除的场合
在这里插入图片描述

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>${fastjson.version}</version>
    <scope>compile</scope>
    <exclusions>
        <exclusion>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-compiler-javac</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  • 5.仓库
    ①仓库的分类:
    [1]本地仓库:当前电脑上部署的仓库目录,为当前带闹闹上所有的Maven工程服务
    [2]远程仓库:
    (1)私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务
    (2)中央仓库:架设在Internet上,为全世界所有Maven工程服务
    (3)中央仓库镜像:为了分担中央仓库的流量,提升用户的访问速度
    ②仓库中保存的内容:Maven工程
    [1]Maven的自身所需要的插件
    [2]第三方框架或工具的jar包
    [3]我们自己开发的Maven工程

  • 6.生命周期/插件/目标
    ①各个构建环境的顺序:不能打乱顺序,必须按照既定的顺序来执行
    ②Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段
    ③Maven核心程序为了更好的实现自动化构建,按照以下的特点执行生命周期中的各个阶段:不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行
    ④插件和目标:
    [1]生命周期的各个阶段仅仅定义了要执行的任务是什么
    [2]各个阶段和插件的目标是对应的
    [3]相似的目标是由特定的插件来完成

  • 7.继承

  • 8.聚合

四.Maven的总结:
Maven的常用命令:
1.mvn clean:清理
2.mvn compile:编译主程序
3.mvn test-compaile:编译测试程序
4.mvn test:执行测试
5.mvn package:打包
6.mvn install:安装
7.mvn site:生产站点

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

猜你喜欢

转载自blog.csdn.net/weixin_43829443/article/details/107597853