尚硅谷的Maven课程,自己学习时记录的笔记
b站视频:Maven零基础入门教程
文章目录
一、概述
(一) 为什么需要Maven
1. 目前的技术
Maven 并不是直接用来辅助编码的,它战斗的岗位并不是以上各层。所 以我们有必要通过企业开发中的实际需求来看一看哪些方面是我们现有技术的不足。
2. 开发中存在的问题
2.1 一个项目就是一个工程
- 如果项目非常庞大,就不适合继续使用
package
来划分模块。最好是每一个模块对应一个工程,利于分工协作。 - 借助
Maven
就可以将一个项目拆分成多个工程。
2.2 项目需要的jar包必须手动“复制”、“粘贴”到WEB-INF/lib目录下
- 同样的
jar
包文件重复出现在不同的项目中,一方面浪费存储空间,另一方面也让工程显得很臃肿。 - 借助
Maven
,可以将jar
包仅仅保存在“仓库”中,有需要使用的工程“引用”这个文件接口,并不需要真的把jar
包复制过来。
2.3 jar包需要别人替我们准备好,或到官网下载
- 不同技术的官网提供
jar
包下载的形式是五花八门的。有些技术官网就是通过 Maven 或SVN
等专门的工具来提供下载的。如果是以非正规的形式下载jar
包,那么其中的内容很可能也是不规范的。 - 借助于
Maven
可以以一种规范的方式下载jar
包。因为所有知名框架或第三方工具的jar
包以及按照统一的规范存放在了Maven
的中央仓库中。以规范的方式下载的jar
包,内容也是可靠的。 - Tips:“统一的规范”不仅是对IT开发领域非常重要,对于整个人类社会都是非常重要的。
2.4 一个jar包依赖其他jar包需要自己手动加入到项目中
jar
包往往不是孤立存在的,很多jar
包都需要在其他 jar 包的支持下才能够正常工作,我们称之为jar
包之间的依赖关系。最典型的例子是:commons-fileupload-1.3.jar
依赖于commons-io-2.0.1.jar
,如果没有 IO 包,FileUpload 包就不能正常工作。Maven
会自动将被依赖的jar
包导入进来。
(二) 什么是Maven?
1. Maven 简介
Maven
是 Apache 软件基金会组织维护的一款自动化 构建 工具,专注服务于 Java
平台的项目构建和依赖管理。Maven
这个单词的本意是:专家,内行。
构建概念
构建并不是创建,创建一个工程并不等于构建一个项目。
以“Java源文件”、“框架配置文件”、“JSP”、“HTML”、“图片”等资源作为“原材料”,去“生产”一个可以运行的项目的过程。
编译、部署、搭建
1.1 编译
以Java源文件[User.java] --> 编译 --> Class字节码文件[User.class] --> 交给JVM去执行
1.2 部署
(1)一个BS项目最终运行的并不是动态Web工程本身,而是这个动态Web工程“编译的结果”。
- 生的鸡 --> 处理 --> 熟的鸡
- 动态Web工程 --> 编译、部署 --> 编译结果
在开发过程中,所有的路径或配置文件中配置的类路径等都是以编译结果的目录结构为标准的。
(2)Tips:运行时环境
其实是一组
jar
包的引用,并没有把jar
包本身复制到工程中,所以并不是目录。
(3)构建过程中的各个环节
- ① 清理:删除以前的编译结果(旧的class字节码文件),为重新编译做好准备。
- ② 编译:将
Java
源程序编译为class字节码文件。 - ③ 测试:自动调用
JUnit
程序,针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。 - ④ 报告:在每一次测试后以标准的格式记录和展示测试结果。
- ⑤ 打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。
Java
工程对应jar
包,Web 工程对应war
包。 - ⑥ 安装:在
Maven
环境下特指将打包的结果——jar
包或war
包安装到“仓库”中的指定位置。 - ⑦ 部署:将打包的结果部署到远程仓库或将
war
包部署到服务器上运行。
(4)自动化构建
将“编译、打包、部署、测试”,这些程式化的工作交给机器。
2. 部署 Maven 核心程序
参考:尚硅谷_Maven操作步骤截图.pdf + 视频p7
IDEA版本见笔记第三部分
二、Maven 核心概念
①POM ②约定的目录结构 ③坐标 ④依赖管理 ⑤仓库管理 ⑥生命周期 ⑦插件和目标 ⑧继承 ⑨聚合
(一) 约定的目录结构
1. 创建约定的目录结构
- 创建第一个
Maven
工程,工程名:Hello。参考:Maven操作指南.txt - [1] 根目录:工程名;[2] src目录:源码;[3] pom.xml文件:Maven 工程的核心配置;[4] main目录:存放主程序;[5] test目录:存放测试程序;[6] java目录:存放Java源文件;[7] resourse目录:存放框架或其他工具的配置文件
2. 为什么要遵守约定的目录结构?
-
Maven
要负责我们这个项目的自动化构建,以编译为例,Maven
要想自动进行编译,那么它必须知道Java
源文件保存在哪里。 -
如果我们自己自定义的东西想让框架或工具知道,有两种办法:
-
以配置的方法明确告诉框架
<param-value>Classpath:spring-context.xml</param-value>
-
遵守框架内部以及存在的约定
log4j.properties
或log4j.xml
形式
-
-
现在
JavaEE
开发领域普遍认同一个观点:约定 > 配置 > 编码。意思就是能用配置解决的问题就不编码, 能基于约定的就不进行配置。而Maven
正是因为指定了特定文件保存的目录才能够对我们的Java
工程进行自动化构建。
(二) 常用命令和联网问题
注意:执行与构建过程相关的
Maven
命令,必须进入pom.xml
所在的目录。
- 与构建过程相关:编译、测试、打包、…
1. 常用 Maven 命令
在 cmd 中输入命令
(1)mvn clean:清理
(2)mvn compile:编译主程序
(3)mvn test-compile:编译测试程序
(4)mvn test:执行测试
(5)mvn package:打包
(6)mvn install:安装
(7)mvn site:生成站点
2. 关于联网问题
(1) Maven
的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在 Maven
的核心程序中。
(2)当我们执行的 Maven
命令需要用到某些插件时, Maven
核心程序会首先到本地仓库中查找。
(3)本地仓库的默认位置:[系统中当前用户的家目录].m2\repository
C:\Users\[登录当前系统的用户名]\.m2\repository
(4) Maven
核心程序如果在本地仓库中找不到需要的插件,那么它会自动连接外网,到中央仓库下载。如果此时无法连接外网,则构建失败。
(5)修改默认本地仓库的位置可以让 Maven
核心程序到我们事先准备好的目录下查找插件。
-
找到
Maven
解压目录D:\develop\Maven\apache-maven-3.2.2\conf\settings.xml
-
在
settings.xml
文件中找到localRepository
标签,并将标签从注释中取出 -
将标签体内容修改为以及准备和的Maven仓库目录:
<localRepository>/path/to/local/repo</localRepository>
- 改成:(记得先把 RepMaven.zip 压缩包解压,并放到 RepMaven 文件夹中)
<localRepository>D:\develop\Maven\RepMaven</localRepository>
(三) POM
- Project Object Model:项目对象模型。将 Java 工程的相关信息封装为对象作为便于操作和管理的模型。(DOM Document Object Model:文档对象模型)
pom.xml
对于Maven