深入解析Maven--助你起飞

143 阅读6分钟

这是我参与更文挑战的第9天,活动详情查看: 更文挑战


简介

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仓库目录


点赞收藏加关注不迷路哦~