Maven简介
Maven的作用
Maven是一个项目管理工具,它可以帮助程序员构建工程,管理jar包,编译代码,完成测试,项目打包等。
Maven工具是基于POM实现的。在Maven的管理下每个项目都相当于是一个对象。(注:POM是Project Object Model的缩写,即项目对象模型)
Maven标准化了项目的结构。即Maven对项目结构和构建命令等进行了标准化定义。
Maven提供了一个免费的中央仓库。
Maven是跨平台的,在各个平台上的命令都是相同的统一的。
Maven的作用
一键构建
构建:将项目进行进行编译、测试、运行、打包、安装、安装、部署等过程称为构建。
一键构建即可以通过maven工具通过命令轻松完成构建的工作。
项目的生命周期
使用maven完成项目的构建过程中,包括:验证、编译、测试、打包、部署等过程,maven将这些过程规范为项目构建生命周期。
生命周期 | 作用 |
验证Validate | 验证项目是否正确 |
编译 Compile | 对源代码进行编译 |
测试 Test | 进行单元测试小功能 |
打包 package | 创建JAR/WAR包 |
检查 Verify | 对集成测试的结果进行检查,以保证质量达标 |
安装 install | 安装打包的项目到本地仓库,以供其他项目使用 |
部署 deploy | 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程 |
maven由三套相互独立的生命周期。分别是构建生命周期,clean生命周期(该周期的作用为清理构建后的文件),site生命周期(该周期的作用是生成项目报告)。其中构建生命周期重点学习。
Maven常用命令
依赖管理
在传统的web项目中,需要将项目中所需要的依赖jar包复制到工程中。随着项目的功能越来越多,需要的jar包也越来越多,这会导致该web项目所占用的空间越来越大。
所以我们可以使用maven工具来管理这些jar包。在maven工程中不直接将jar包导入到工程,而是有一个专门存放jar包的仓库。
仓库中的每个jar包都有自己的坐标。所以在maven工程中通过jar包的坐标拿取到相应的jar包即可运行程序。
Maven仓库类型
Maven常用命令
Maven配置文件
配置本地仓库
本地仓库的默认位置是${user.dir}/.m2/repository,${user.dir}表示windows用户目录,可以通过修改${MAVEN_HOME}\conf\settings.xml文件修改本地仓库的位置。
在<settings>中添加如下标签:
配置镜像
因为访问中央仓库速度较慢,所以可以配置镜像代理中央仓库的下载请求。在<settings>下的<mirros>中添加如下标签即可配置镜像:
<mirror>
<!-- 指定镜像ID -->
<id>nexus-aliyun</id>
<!-- 匹配中央仓库。-->
<mirrorOf>central</mirrorOf>
<!-- 指定镜像名称 -->
<name>Nexus aliyun</name>
<!-- 指定镜像路径 -->
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
配置JDK版本
在初始下载的maven中对于JDK的默认设置为JDK1.5版本。因为不同的JDK版本由不同的语法或者方法的使用,所以一般将maven的JDk设置为自己电脑中JDK的版本。
设置方法为:在<settings>下的<profiles>中添加如下标签即可配置JDK版本:
<profile>
<id>jdk11</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>11</jdk>
</activation>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.compilerVersion>11</maven.compiler.compilerVersion>
</properties>
</profile>
Maven的安装
下载
下载网址:Maven – Download Apache Maven
现在上图中红色部分即可。
安装
将下载的压缩包直接解压即可
mave的目录如下图所示
bin:是存放maven的命令文件夹
boot:存放maven本身的引导文件
conf:存放maven的配置文件
lib:存放maven本身运行所需要的jar包
配置环境变量
因为Maven是由java语言开发的,运行时依赖java环境,所以需要在计算机环境变量中配置JAVA_HOME,配置如下图所示:
配置MAVEN_HOME和path环境变量是为了更方便的使用Maven命令(即可以在控制台中更方便的使用maven命令。配置过程如下:
添加MAVEN_HOME环境变量:
在path中添加内容:
查看版本
注意事项
要想运行maven需要先安装jdk且配置环境变量JAVA_HOME,因为maven的运行依赖于java。
Maven工程的类型和结构
Maven的工程类型
POM工程
POM工程是逻辑工程,maven并不会对该类型工程做打包处理,这些工程往往不包含具体的业务。
JAR工程
普通java工程,在打包时会将项目打成jar包。
WAR工程
JAVA Web工程,在打包时会将项目打包成war包。
Maven工程结构
文件目录结构
如图所示:
src:源代码
target:编译生成文件
pom.xml:maven工程配置文件
项目结构
src/main/java:存放项目的java文件
src/main/resources:存放项目资源文件,配置文件
src/test/java:存放项目的测试文件
src/test/resources:存放测试时的资源文件
Maven工程的开发
构建maven工程
对pom文件进行配置
项目的基本信息
groupId:一般定义项目组名,命名规则使用反向域名。
artifactId:一般定义项目名,命名使用小写字母。项目发布后,它的坐标是groupId+artifactId。
version:定义版本号。版本号一般有三段,第一段:革命性的产品升级。第二段:新功能版本。第三段:修正一些bug。
packaging:packaging定义打包方式。
依赖jar包
<dependencies>中定义依赖的jar包坐标。查找依赖坐标的网站:https://mvnrepository.com/
配置信息
<properties>中定义一些配置信息。
插件配置
<plugins>中定义第三方插件。eg:添加Tomcat7插件示例
配置使用maven中的Tomcat7插件运行项目:
通过命令运行:
配置运行Tomcat7插件:
依赖范围
在测试程序的时候会遇到如下错误:
该错误是因为使用maven引入的jar包在运行时与tomcat插件中的jar包引起的冲突。所以需要设置引入的jar包的依赖范围,这样就可以避免在运行时与tomcat插件中的jar引起冲突。设置依赖范围如下:通过在<dependency>中添加<scope>,可以设置依赖的作用范围,有以下取值:
compile | 默认范围。表示该依赖在编译和运行时生效,项目打包时也会将该依赖打包进去。 |
provided | 使用此依赖范围的Maven依赖,编译和测试时有效,但在运行时无效。典型的例子是servlet-api,在运行时Web容器已经提供依赖,就不需要Maven重复地引入一遍。 |
runtime | runtime范围表明编译时不需要生效,而只在运行时生效。典型的例子是JDBC驱动包,编译时只需要JDK的JDBC接口即可,只有运行项目时才需要具体的JDBC驱动。 |
test | test范围表明使用此依赖范围的依赖,只在编译和运行测试代码的时生效,程序的正常运行不需要此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。 |
system | 如果有些你依赖的jar包没有Maven坐标的,它完全不在Maven体系中,这时候你可以把它下载到本地硬盘,然后通过system来引用。(不推荐使用) |
测试