这是我参与更文挑战的第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仓库目录
点赞收藏加关注不迷路哦~