记录自己的Maven学习的笔记,学习课程是通过B站尚硅谷的视频学习。
@Description Maven学习
@author Van
①概念
1.目前掌握的技术:
浏 览 器
表 示 层 ---->视图层---->H5/CSS/JS/JSP
控制层---->Servlet/Action(Strust2)/Handler(SpringMVC)
业务逻辑层 ---->Spring IOC AOP
持 久 层 ---->JDBC/JDBCUtils/SpringJdbcTemplate(轻量级)/Hibernate(重量级连接)/Mybatis
2.目前技术在开发中存在的问题
1.一个项目就是一个工程
---》如果项目非常大,就不适合继续使用package来划分,最好是每一个模块对应一个工程,利于分工协作
---》借助Maven就可以将一个项目拆分成多个工程。
2.项目中需要jar包必须手动”复制“到WEB-INF/lib目录下
---》带来的问题是重复jar包出现在重复的工程中,浪费存储空间,也让项目比较臃肿
借助Maven,可以将jar包仅仅保存在”仓库“中,有需要使用的工程“引用”这个文件接口,并不需要真的把jar包复制过来
3.jar包需要别人替我们准备好,或到官网下载
---》不同技术官网提供的jar包的形式五花八门
---》有些技术的官网就是通过Maven或SVN等专门的工具来提供下载的
---》如果是非正规的方式下载的jar包,那么其中的jar包也可能不规范
借助Maven可以以一种规范的方式去下载jar包,因为所有知名框架或第三方工具的jar包都存放在Maven的中央仓库中
4.一个jar依赖其他jar需要自己手动加入到项目中
---》jar包的依赖关系非常复杂且都需要自己非常清楚的了解,如果都去了解会增加许多不必要的开发成本
Maven会自动将被依赖的jar包导入进来
3.什么是Maven
1.是一款服务于Java平台的自动化构建工具
2.构建
1.概念:以“Java源文件”、“框架配置文件”、“HTML”、“图片”等资源为“原材料”,去“生产”一个可以运行的项目的过程
2.编译、部署、搭建
3.构建过程中的生命周期
1.清理:将以前编译得到的旧的Class字节码文件删除,为下一次编译准备
2.编译:编译成字节码文件
3.测试:自动测试,自动调用junit程序
4.报告:测试程序执行的结果
5.打包:动态Web工程打war包,Java工程打Jar包
6.安装:Maven特定的概念--将打包得到的文件复制到“仓库”中的指定位置
7.部署:将动态Web工程生成的war包复制到Servlet容器的指定目录下,使其可以运行
4.自动化构建
4.安装Maven核心程序
1.检查Java_HOME环境变量
2.解压Maven核心程序的压缩包
3.配置Maven相关的环境变量
1.MAVEN_HOME或M2_HOME
2.path
4.mvn -v查看maven的版本
5.Maven的核心概念
1.约定的目录结构
2.POM
3.坐标
4.依赖
5.仓库
6.生命周期/插件/目标
7.继承
8.聚合
②第一个Maven工程
1.创建约定的目录结构
1. 根目录:工程名
2. ------src目录:源码
------|------main:存放主程序
------|------| ------java:存放java源文件
------|------| ------resources:存放框架或其他工具的配置文件
------|------test:存放测试程序
------|------| ------java:
------|------| ------resources:
3. ------pom.xml:Maven工程的核心配置文件
为什么遵守约定的目录结构?
1.Maven自动化构建,得以Maven的标准来
2.自己定义的东西要让框架或工具知道得遵守Maven内部的约定
log4j.properties/log4j.xml
4.约定>配置>编码
③常用Maven命令
1.注意:执行与构建过程相关的Maven命令,必须进入pom.xml所在的目录
与构建过程相关:编译、测试、打包、...
2.常用命令
1.mvn clean:清理
2.mvn compile:编译主程序
3.mvn test-compile:编译主程序
4.mvn test:执行测试
5.mvn package:打包
6.mvn install:安装
7.mvn site:生成站点
④关于联网问题:
1.Maven的核心程序中仅仅定义了抽象的生命周期,但是具体的工作必须由特定的插件来完成。而插件本身并不包含在Maven的核心程序中。
2.当执行的Maven命令需要用到某些插件时,Maven核心程序会首先到本地仓库中查找。
3.本地仓库的默认位置:【系统当前用户的家目录】\.m2\repository
4.Maven核心程序如果在本地仓库中找不到需要的插件,那么它会自动联网到中央仓库去下载
5.如果没有联网,则构建失败
6.可以修改默认本地仓库的位置
1.maven解压目录\conf\settings.xml
2.找到localRepository标签,从注释中取出。将内容修改为准备好的自己的仓库目录
⑤POM
1.pom含义:Project Object Model 项目对象模型
2.pom.xml对于Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置
⑥坐标
1.使用三个向量在仓库中唯一定位一个Maven工程
1.groupid:公司/组织域名倒序+项目名
2.artifactid:模块名称
3.version:版本
2.Maven工程的坐标与仓库中路径的对应关系
⑦仓库
1.仓库的分类:
1.本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
2.远程仓库
1.私服:搭建在局域网环境中,为局域网所有的Maven工程服务
2.中央仓库:架设在Internet上,为全世界所有的Maven工程服务
3.中央仓库镜像:为了分担中央仓库的流量和压力,提升用户访问速度
2.仓库中保存的内容:Maven工程
1.Maven自身所需要的插件
2.第三方框架或工具的jar包
3.自己开发的Maven工程
⑧依赖
1.Maven解析依赖信息时,会在本地仓库中查找被依赖的jar包
1.对于自己开发的Maven工程,使用install命令安装后就可以进入仓库
2.依赖的范围:
1.compile:
1.对主程序是否有效:有效
2.对测试程序是否有效:有效
3.是否参与打包:参与
2.test:
1.对主程序是否有效:无效
2.对测试程序是否有效:有效
3.是否参与打包:不参与
3provided:
1.对主程序是否有效:有效
2.对测试程序是否有效:有效
3.是否参与打包:不参与
⑨生命周期:
1.各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行
2.Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的
3.Maven核心程序为了更好的实现自动化构建,按照这一特点的执行生命周期的各个阶段,不论现在要执行生命周期中的哪一个阶段,都是从这个生命周期最初的位置开始执行
4.插件和目标
1.生命周期的各个阶段仅仅定义了要执行的任务是什么。
2.各个阶段和插件的目标是对应的
3.相似的目标由特定的插件来完成