一、不使用Maven开发时存在的问题(为什么使用Maven)
1、一个项目就是一个工程。
如果项目非常庞大,就不适合继续使用package来划分模块,最好是一个模块对应一个工程,利用分工协作。
借助Maven就可以将一个项目拆分成多个项目。
2、项目中需要的jar包必须手动“复制”、“粘贴”到WEB-INF/lib目录下
带来的问题是:同样的jar包文件重复出现在不同项目工程中,一方面浪费存储空间,另外也让工程比较臃肿。
借助Maven,可以将jar包仅仅保存在“仓库”中,有需要使用的工程“引用”这个文件接口,并不需要把jar包真的赋值到项目中。
3、jar包需要别人替我们准备好,或者到官网上下载。
不同技术的官网提供的jar包下载形式不一样。
很多技术的官网就是通过Maven和SVN等专门的工具提供下载的。
如果以不规范的方式下载的jar包,可能并不是你自己需要的。
借助于Maven可以以一种规范的方式下载jar,因为所有知名框架或第三方工具的jar包已经按照统一的规范存放在了Maven的中央仓库中。
4、一个jar包以来的其他jar包需要自己手动加入到项目中。
比如commons-fileupload-1.3.jar依赖于commons-io-2.0.1.jar。如果所有jar包之间的依赖关 系都需要我们自己非常清楚的了解,就会极大的增加学习成本。
借助Maven,Maven就会自动将依赖的jar包都导入进来。
二、Maven是什么
-
Maven是一款服务于Java平台的自动化构建工具。
自动化构建工具发展历程:Make>Ant>Maven>Gradle
- 项目构建清理:
- 将以前编译得到的旧的class字节码文件删除,为下一次编译做准备。
- 编译:将Java源程序编译成class字节码文件
- 测试:自动测试,自动调用junit程序
- 报告:测试程序执行的结果
- 打包:动态web工程打war包,java工程打jar包
- 安装:Maven特定的概念——将打包得到的文件复制到“仓库”中指定的位置
- 部署:将动态web工程生成的war包复制到Servlet容器指定的目录下,使其可以运行
三、安装Maven
四、Maven常用命令
1.注意:执行与构建过程相关的命令,必须进入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:生成站点
五、Maven下载问题
1.当执行的Maven命令需要用到某些插件时,Maven核心程序会先到本地仓库汇总查找。
2.本地仓库的位置:C:\Users\[登录当前系统的用户名]\.m2\repository。
3.如果Maven在本地仓库中找不到需要的插件或jar包,就会自动下载。如果此时无法联网,会构建失败。
4.修改本地仓库的默认位置
[1].找到Maven的解压目录\conf\settings.xml
[2].在settings.xml中找到
<localRepository>标签,放开该标签的注释。
[3]
.将标签体重的值换成自己想换成的仓库的路径。
六、Maven的核心概念:
①约定的目录结构
②POM
③坐标
④依赖(重要)
⑤仓库
⑥生命周期/插件/目标
⑦继承
⑧聚合
七、约定的目录结构
工程名
丨——src
丨——丨——main
丨——丨——丨——java(主程序java文件)
丨——丨——丨——resources(主程序资源文件,包括xml、
properties文件等
)
丨——丨——test
丨——丨——丨——java(测试程序ja
1.解压部署Maven核心程序
八、POM
1.含义:Project Object Model项目对象模型
2.pom.xml对于Maven工程是核心的配置文件,与构建过程相关的一切设置都在这个文件中配置。
九、坐标
[1].Maven的坐标
使用以下三个向量在仓库中唯一定位一个Maven工程
①groupid:公司或组织域名倒序+项目名
②
artifactId:模块名
③
version:版本
<groupId>com.mfc</groupId>
<artifactId>CAS-web2</artifactId>
<version>0.0.1-SNAPSHOT</version>
十、仓库
1.仓库的分类
[1]本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务。
[2]远程仓库
①私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务
②中央仓库:架设在Internet上,为全世界所有的Maven工程服务。
③中央仓库镜像:为了分担中央仓库的流量,提升访问速度
2.仓库中保存的内容:Maven工程
[1].Maven自身所需要的插件
[2].第三方框架或工具的jar包
[3].我们自己开发的工程Maven工程
十一、依赖
1.Maven在界希依赖信息时回到本地仓库中查找被依赖的jar包。
对于我们自己开发的Maven工程,使用mvn install命令安装后就可以进入仓库
2.依赖的范围
如下面的scope标签
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
[1].compile范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:参与
[2].test范围依赖
对主程序是否有效:无效
对测试程序是否有效:有效
是否参与打包:不参与

[3]. provided范围依赖
对主程序是否有效:有效
对测试程序是否有效:有效
是否参与打包:不参与
是否参与部署:不参与


十二、生命周期
1.各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
2.Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
3.Maven核心程序为了更好的实现自动化构建,按照这一特点执行生命周期中的各个阶段:不论现在要执行生命周期 中的哪一个阶段,都是从生命周期最初的位置开始执行。