一、什么是maven?
1.概述
核心点:项目构建、依赖管理、【更新】:源码关联
(如何关联源码:在依赖的jar上右击 maven download source即可)
Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。(字面意思为 专家)
开发团队可以自动完成该项目的基础设施建设时间几乎没有,Maven使用标准的目录结构和默认构建生命周期。
maven是Java编写的,服务于Java 的构建工具
在多个开发团队环境的情况下,Maven可以设置在上班的路上在很短的时间内为标准。由于大部分的项目设置简单可重复使用,
Maven的生活的开发容易,而创建报告,检查,生产和测试的自动化设置。
学maven最重要也是最难的不是怎么配置、怎么使用maven,而是为什么使用maven,既然目前掌握的东西已经可以完成一些项目了,
那为什么还要学习maven呢? 为什么是maven而不是ant等其他构建工具? 带着这个问题我们再往下走。
这里就不再展开 ant && 新秀gradle 等
2.目前存在的问题
1)一个项目只是一个工程
如果项目非常庞大,模块众多,使用package进行划分也不便于管理,最好是一个模块对应一个工程,便于分工及管理等。
2)使用的jar包必须手动复制——粘贴到WEB-INF/lib目录下
同样的jar包重复出现在不同工程中,继浪费空间,又导致项目臃肿。
使用maven将可以把jar包保存在‘仓库’中,工程只需要进行引用。
3)jar包需要自己准备(官网下载等)
各大官网提供的下载是五花八门的,导致下载不便(当然,去一些英文网站下载由于英语水平也导致困难/笑哭)
而且,一些第三方提供的下载(CSDN等等)下载的内容难以保证是否正规
当然,也有一些是直接提供maven下载的
4)各jar包的依赖管理需要手动管理
比如fileupload依赖于io包,如果依赖信息越来越多,手动管理将十分复杂!
maven就会帮我们进行依赖管理
3.项目构建
既然maven作为一款项目构建和依赖管理的工具,那什么叫项目构建呢
以Java源文件、框架配置文件、JSP、HTML、图片等等的资源这些“原材料”,去“生产”一个可以运行的Java程序的过程
包含 编译、部署、搭建等过程
这里我们需要特别注意的是工程目录编译前后的关系:
//像我们访问webContent下某个文件时是无需写此目录的。build是编译后的classes
想要查看编译后的项目目录信息,可以安装插件直接browse deployment location再找到项目文件夹(当然这一步可以手动)
为了清晰地看清结构呢,可以复制项目(到tomcat中复制项目)到eclipse任意一个工程中展开查看,例如:
//可以看到,和webContent是没有关系的(当然,编译结果是在build目录下,可以搜索navigator视图查看)
//项目运行的不是我们编写的动态WEB工程,而是“编译”后的结果
//像rt等一些运行时环境是不在目录结构中的,只是引用
构建的步骤:
清理:将以前编译的旧的字节码文件删除
编译:将源程序编译成字节码文件
测试:关键点的自动测试,自动调用我们准备好的jUnit
报告:测试的结果就是测试报告
打包:动态Web工程打的是war包,Java工程打的是jar包
安装:将打包得到的文件复制到仓库中的指定位置
部署:将动态Web工程生成的war包复制到servlet容器目录的指定位置
二、如何使用maven
安装maven核心程序
1)检查:
由于maven也是java编写的,安装之前需要检查JAVA_HOME是否正确配置
Echo %JAVA_HOME%:输出JAVA_HOME路径
Java -version:查看JDK版本
2)解压:
之后我们解压核心程序:apache-maven-3.5.0-bin.zip (版本自由选择),解压好后放在一个非中文、无空格目录下
(我这里放到F:/maven目录下)
3)配置:
对maven的环境变量进行配置
a.配置MAVEN_HOME或M2_HOME(向下兼容)
b.配置Path
新建系统变量 MAVEN_HOME(M2_HOME亦可) 变量值:F:\maven\apache-maven-3.2.2
编辑系统变量 Path 添加变量值: ;%MAVEN_HOME%\bin
//当然,其实自己的电脑是可以配用户变量的(据网友回答:
如果设置的是用户环境变量,还需要注销再登陆才生效;path中加上 C:\Windows\System32)
//settings的配置见下文补充(位置与内容)
4)验证:运行dos命令 mvn -v;正常显示版本信息则成功。
5)更新
Maven的更新
在Windows上更新Maven非常简便,只需要下载新的Maven安装文件,解压至本地目录,然后更新M2_HOME环境变量便可。
更新注意修改的地方:环境变量的更换的配置,settings.xml中本地仓库的设置,jdk版本的设置,仓库镜像的设置,eclipse中的设置
【更新】:我们可以将conf目录下的settings.xml文件拷贝一份到Maven本地仓库的位置(之后更换版本时就无需重复指定了),之后在eclipse中只需指定一次配置文件位置即可!
Linux下安装可以参考:https://blog.csdn.net/mynameissls/article/details/54140176
三、maven的核心概念
1.概念
1.约定目录结构
2.POM
3.坐标
4.依赖
5.仓库
6.生命周期/插件/目标
7.继承
8.聚合
//以上重要程度按颜色区分,以下将逐一解释介绍这些概念
聚合、继承将在day02讲解
2.第一个maven工程
我们通过第一个maven工程来感性认识一下以上的概念
①目录结构
Hello
|---src
|---|---main
|---|---|---java
|---|---|---resources
|---|---test
|---|---|---java
|---|---|---resources
|---pom.xml
1)创建约定目录结构
根目录——工程名
src目录——源码
main——主程序
test——测试程序
java——java源文件
resources——框架或其他工具的配置文件等
pom.xml文件——maven的核心配置文件
2)为什么要遵循约定目录结构
maven作为自动化构建工具,比如它要编译,它就需要知道编译的路径,按照约定,maven才能智能地为我们服务
要想让maven知道我们自定义的结构,我们可以:
使用配置文件
遵循约定
一般情况下:约定优于配置
接下来我们来建立这个maven工程
在WORKPLACE下新建Hello文件夹
在Hello文件夹下新建src文件夹和pom.xml配置文件
配置文件这里暂时不展开,后续补充:
<?xml version="1.0" ?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.atguigu.maven</groupId> <artifactId>Hello</artifactId> <version>0.0.1-SNAPSHOT</version> <name>Hello</name> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> </dependencies> </project>