1. Maven的基本概念
Maven(翻译为”专家”,”内行”)是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。 Maven是一个项目管理和综合工具。Maven提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven使用标准的目录结构和默认构建生命周期。
在多个开发团队环境时,Maven可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
Maven提供了开发人员的方式来管理:
Builds
Documentation
Reporting
Dependencies
SCMs
Releases
Distribution
mailing list
概括地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务。
1.1 项目构建
项目构建过程包括【清理项目】→【编译项目】→【测试项目】→【生成测试报告】→【打包项目】→【部署项目】这几个步骤,这六个步骤就是一个项目的完整构建过程。
理想的项目构建是高度自动化,跨平台,可重用的组件,标准化的,使用maven就可以帮我们完成上述所说的项目构建过程。
1.2 依赖管理
依赖指的是jar包之间的相互依赖,比如我们搭建一个springmvc的开发框架时,光光有spring-web.jar这个jar包是不行的,它还依赖其它的jar包,依赖管理指的就是使用Maven来管理项目中使用到的jar包,Maven管理的方式就是“自动下载项目所需要的jar包,统一管理jar包之间的依赖关系”。
1.3 使用Maven的好处
Maven中使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个目录下,这些目录都有明确的约定。
Maven的每一个动作都拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情
使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理。
2. Maven下载及安装
2.1 下载
下载地址:http://maven.apache.org/download.cgi
下载完成后,得到一个压缩包,解压,可以看到maven的组成目录,我下载的版本是apache-maven-3.5.0,其目录结构如下:
Maven目录分析
bin:含有mvn运行的脚本
boot:含有plexus-classworlds类加载器框架
conf:含有settings.xml配置文件
lib:含有Maven运行时所需要的java类库
LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍
2.2 Maven安装
(1)首先要确保电脑上已经安装了JDK(要jdk 1.6+的版本),配置好JDK的环境变量,使用如下的两个命令检查检查JDK安装的情况。
Echo %JAVA_HOME%
Java -version
(2)对apache-maven-3.5.3-bin.tar.zip进行解压缩
对apache-maven-3.5.3-bin.tar.zip进行解压缩,例如解压到如下目录(解压目录最好不要有中文),我放到的是C:\Program Files
(3)设置系统环境变量:MAVEN_HOME
(4)设置环境变量Path,将%MAVEN_HOME%\bin加入Path中,一定要注意要用分号;与其他值隔开,如下图所示:
%MAVEN_HOME%\bin代表的就是"C:\Program Files\apache-maven-3.5.0\bin"目录
(5)验证Maven安装是否成功
打开cmd窗口,输入”mvn –v”命令 查看Maven的相关信息,如下图所示:
能够出现这样的信息就说明Maven的安装已经成功了。
(6)设置MAVEN_OPTS环境变量(可选配置)
由于Maven命令实际上是执行了Java命令,所以可以通过JAVA命令参数的方式来设置MAVEN运行参数。MAVEN_OPTS环境变量正是用于此用途。
3. Maven的简单使用
3.1 Maven项目的目录约定
MavenProjectRoot(项目根目录)
|—-src
| |—-main
| | |—-java ——存放项目的.java文件
| | |—-resources ——存放项目资源文件,如spring, hibernate配置文件
| |—-test
| | |—-java ——存放所有测试.java文件,如JUnit测试类
| | |—-resources ——存放项目资源文件,如spring, hibernate配置文件
|—-target ——项目输出位置
|—-pom.xml —-用于标识该项目是一个Maven项目
3.2 手动创建Maven项目,使用Maven编译
(1)创建项目根文件夹,例如test
(2)在test文件夹中创建“pom.xml”文件,如下图所示:
编辑pom.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--所有的Maven项目都必须配置这四个配置项-->
<modelVersion>4.0.0</modelVersion>
<!--groupId指的是项目名的项目组,默认就是包名-->
<groupId>cn.yhl.maven</groupId>
<!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"-->
<artifactId>hello</artifactId>
<!--version指的是版本,这里使用的是Maven的快照版本-->
<version>SNAPSHOT-0.0.1</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
(3)编写Java类文件,Maven项目规定,所有的*.java文件必须放在src目录下的main目录下的java目录中,在test项目根目录中创建一个src目录,然后在src目录中创建main目录,在main目录中再创建java文件夹,如下图所示:
编辑Hello.java文件,内容如下:
public class Hello{
public static void main(String[] args){
System.out.println("Hello Maven");
}
}
(4)使用Maven编译Hello.java,首先进入到项目根目录,然后使用命令”mvn compile”进行编译,如下图所示:
使用Maven编译完成之后,在项目根目录下会生成一个target文件夹,如下图所示:
打开target文件夹,可以看到里面有一个classes文件夹,classes文件夹存放的就是编译成功后生成的.class文件,如下图所示:
(5)使用”mvn clean”命令清除编译结果,也就是把编译生成的target文件夹删掉,执行完”mvn clean”命令后,target文件夹就会被删除了。
4. 修改从Maven中心仓库下载到本地的jar包的默认存储位置
从Maven中心仓库下载到本地的jar包的默认存放在”
user.home/.m2/repository”中,
u
s
e
r
.
h
o
m
e
/
.
m
2
/
r
e
p
o
s
i
t
o
r
y
”
中
,
{user.home}表示当前登录系统的用户目录(如”C:\Users\yhl”),Jar包存放在这个位置不太好,我们希望能够自己定义下载下来的jar包的存放位置,因此我们可以自己设置下载到本地时的jar包的存放目录。
比如:在“D:\maven”目录下创建一个“repository”文件夹
找到apache-maven-3.5.0\conf目录下的settings.xml文件,编辑setting.xml文件,如下图所示:
加上下面的代码
<localRepository>D:\maven\repository</localRepository>
这样就可以把jar包下载到我们指定的D:\maven\repository目录中了,把jar包下载到本地的好处就是,当编译时,会优先从本地的jar包去找,如果本地存在,就直接拿来用,如果不存在,就从Maven的中心仓库去下载。
第一次执行”mvn compile”和”mvn clean”这两个命令时,Maven会去中央仓库下载需要的jar包,而第二次执行这两个命令时,由于所需的jar包已经在本地的仓库中存储,所以就可以直接拿来用了,这样就省去了去中央仓库下载jar包的时间。