Maven 入门 - 一个小白从无到有的心路历程

Maven 入门

1.为什么要使用Maven?[why]
1)一个项目就是一个工程,借助于package来划分模块,如果项目非常的庞大,就不适合继续使用package来划分模板。最好的是每一个模块对应一个项目,利于分工协作。借助于Maven就可以将一个项目拆分为多个工程,并且建立多个项目之间的关系。
2)重复性的劳动。项目中需要的jar包必须要手动“复制”“粘贴”到WEB-INF/lib项目下,带来的问题:同样的jar包文件重复出现在不同的项目工程中,一方面浪费了储存空间,另外也让项目比较臃肿,借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程,“引用”这个文件,并不需要重复复制。
3)jar包需要别人替我们准备好,你甚至都不知道jar包从哪里来,也许是老师的“祖传”jar包,也许是到官网下载,所有知名框架或第三方工具jar包已经按照统一规范放在了Maven的中央仓库中。
4)一个jar包依赖的其他jar包也需要自己手动添加到项目中,我们早期使用框架就是这样。而Maven会自动将被依赖的jar包导入进来。
总而言之,好麻烦~~

2.Maven是什么?[what]
1)Maven 是Apache软件基金会组织维护的一款自动化构建工具,专注服务于java平台的项目构建和依赖管理。当然,构建工具不仅仅只有maven,根据构建工具的发展,依次有:
Make --> Ant --> Maven --> Gradle
2)构建:就是以我们编写的java代码、框架配置文件、国际化等其他资源文件、jsp页面和图片静态资源作为“原材料”,去“生产”出一个可以运行的项目的过程。
我们可以将eclipse中的源代码和编译之后的结果进行对比
1.构建过程中的几个主要环节
①清理:删除以前的编译结果,为重新编译做好准备
②编译:将java源程序编译为字节码文件。
③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。
④报告:将每一次测试后以标准的格式记录和展示测试结果。
⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java工程对 应java包,web工程对应war包。
⑥安装:在maven环境下特质将打包的结果—jar包或者war包安装到本地仓库中。
⑦部署:将打包的结果部署到远程仓库货将war包部署到服务器上运行。

3.自动化构建
在这里插入图片描述

程序员一天的工作

在这里插入图片描述
能否将这些程序化的工作交给机器自动完成呢?—当然可以!这个就是自动化构建

此时,Maven 的意义就体现出来了,它可以自动的从构建过程的起点一直执行到终点。

4.Maven 的核心概念
1)约定的目录结构(不管使用什么开发工具,有一个约定好的目录结构)
2)POM(重点)
3)坐标
4)依赖
5)仓库
6)生命周期/插件/目标
7)继承
8)聚合

4.1 Maven的标准目录结构
1)顶级目录结构
在这里插入图片描述

src:该目录主要存放的是项目的源代码文件。
    target:该目录是项目编译后产生的一个目录,主要存放的是编译后的.class文件。
    pom.xml:该文件是Maven项目的核心配置文件,配置jar包的坐标信息。

2)src目录结构
在这里插入图片描述

mian:该目录下存放的是该项目的主要代码文件,下面有三个文件夹,分别用来存放:
    Java:该目录用来存放Java的源代码文件
    resources:该目录主要用来存放项目的一些配置文件(比如spring的xml配置文件)。
    webapp:该目录相当于web项目下webcontent的目录,用来存放js、jsp、web.xml等文件.
test:该目录用来存放项目的测试文件
    Java:该目录主要存放该项目的测试所用的Java源代码。
    resources:该目录存放测试使用的资源文件。

4.2 POM
含义:Project Object Model 项目对象模型
Pom.xml 对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置,重要程度相当于web.xml 对于动态web工程
目前我们在pom中引入了依赖以及当前项目的坐标位置。

4.3 坐标
使用下面的三个向量在仓库中唯一定位一个Maven工程
1)groupId 公司的域名反写 com.woniuxy.cq
2)artifactId 项目名 rocket
3)version 版本 SNAPSHOT(快照版本) rc RELEASE GA milestone
4.4 仓库
1.仓库的分类
(1)本地仓库:当前电脑上部署的仓库项目,为当前电脑上所有的Maven工程服务
(2)远程仓库:
①私服:搭建在局域网的环境中,为局域网范围内的所有Maven工程服务
在这里插入图片描述

②中央仓库,架设在Internet上,为全世界所有的maven工程服务
③中央仓库镜像:为了分担中央仓库的流量,提升用户访问速度

2.仓库中保存的内容:Maven工程
(1)Maven自身所需要的的插件
(2)第三方框架或者工具的jar包(第一方:jdk 第二方:我I)
(3)我们自己开发的Maven工程

4.5 命令
mvn compile 编译
mvn clean 清理 把所有生成的东西都删除
mvn test 测试
mvn package 打包
***Ps:运行所有的maven命令一定要进入pro.xml文件所在的目录

4.6 依赖
(1)依赖范围:
compile 默认,对于编译,测试,运行三个状态都有效
test 顾名思义,只针对执行test代码
provided 对于编译和测试时有效,但运行时无效,典型的时servlet-api,运行时这个由容器来提供
runtime 对测试和运行时有效,但编译时无效
system 与provided的范围一样,但system必须显示的指定依赖文件,通过来进行指定,是与本机绑定的,所以基本很少用到
表格显示如下:
在这里插入图片描述

(2)依赖关系

1).短路优先:谁离得最近就使用谁的依赖jar包

C到达A为C->B->A

C到达B为C->B

例如:

A中的 commons-io的版本为2.4

B中的commons-io的版本为2.0

C中依赖于B,B依赖于A

则C的junit的包为2.0版本

因为依赖的短路优先

2).如果两条路都是一样长的时候呢?

C到达A为C->A

C到达B为C->B

则看pom文件中依赖的两个工程谁在前面就是用哪个版本。但不一定生效 , 往往是这种路径一致造成jar冲突。

(3)依赖排除
在写pom的时候,我们写的一个依赖往往会依赖于其他的包,而这些包可能是过时的不安全的,因此需要排除并重新引用安全的版本,先在依赖这个项目的pom中去除想排除的依赖,再添加指定版本的依赖。

pom的依赖关系可以在idea查看,打开pom.xml。右键点击Diagram,即可显示完整的依赖关系图,包括pom没有明文写出的依赖。可以根据它来判断依赖是否有被重复引用,同时还能查看依赖的版本,十分方便
在这里插入图片描述

4.7 Maven的生命周期
​ Maven的生命周期并不是一个整体,maven拥有三套相互独立的生命周期,分别为clean、default和site。clean是清理项目,default是构建项目,site是建立项目站点

(1)清理 clean
pre-clean:执行一些需要在clean之前完成的工作
clean:移除所有上一次构建生成的文件
post-clean:执行clean之后需要完成的工作

(2)默认default
validate:检查配置,构建所需信息是否都能获取到
complie:编译源代码
test:单元测试
package:打包
verify:(检查)对集成测试的结果进行检查
install:安装打包的项目到本地仓库
deploy:(部署)拷贝工程包到远程仓库

细分的话,共有23个阶段。

validate : 检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。
initialize : 初始化构建状态,例如设置属性。
generate-sources : 生成编译阶段需要包含的任何源码文件。
process-sources : 处理源代码,例如,过滤任何值(filter any value)。
generate-resources : 生成工程包中需要包含的资源文件。
process-resources : 拷贝和处理资源文件到目的目录中,为打包阶段做准备。
compile : 编译工程源码。
process-classes : 处理编译生成的文件,例如 Java Class 字节码的加强和优化。
generate-test-sources : 生成编译阶段需要包含的任何测试源代码。
process-test-sources : 处理测试源代码,例如,过滤任何值(filter any values)。
test-compile : 编译测试源代码到测试目的目录。
process-test-classes : 处理测试代码文件编译后生成的文件。
test : 使用适当的单元测试框架(例如JUnit)运行测试。
prepare-package : 在真正打包之前,为准备打包执行任何必要的操作。
package : 获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。
pre-integration-test : 在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。
integration-test : 处理和部署必须的工程包到集成测试能够运行的环境中。
post-integration-test : 在集成测试被执行后执行必要的操作。例如,清理环境。
verify : 运行检查操作来验证工程包是有效的,并满足质量要求。
install : 安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。
deploy : 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。

(3)站点文档创建site
pre-site
site:生成站点文档
post-site
site-deploy:将生产的站点文档部

(4)命令行与生命周期
三套生命周期是相互独立的,用户调用clean生命周期时,不会触发default生 命周期的任何阶段,反之亦然。在一个生命周期中,运行某个阶段的时候,它 之前的所有阶段都会被运行。执行多个生命周期时,每个生命周期间使用空格分开。
举例如下:

mvn clean
调用clean生命周期的clean阶段,实际执行pre-clean和clean阶段
mvn test
调用default生命周期的test阶段,实际执行test以及之前所有阶段
mvn clean install
调用clean生命周期的clean阶段和default的install阶段,实际执行pre-clean和clean,install以及之前所有阶段

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值