一、Maven的作用
1.项目模块管理
一个项目可能是由多个模块构成,使maven来管理多个模块。
2.依赖关系管理
当不使用maven时,每次构建新的项目必须将许多jar包添加到classpath中,如果漏了某个jar包都会报错。而使用maven之后可以在一个pom.xml文件中管理jar包。修改和替换都很方便。
3.项目构建(摘自Maven生命周期详解)
Maven有三个生命周期,每个生命周期由一组阶段组成。生命周期之间相互独立,可以单独调用。而生命周期内的阶段则是相互依赖的:
- Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
- Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
- Site Lifecycle 生成项目报告,站点,发布站点。
我再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。
二、Maven的使用
1.Maven目录结构(摘自‘孤傲苍狼’博客)
MavenProjectRoot(项目根目录)
|----src
| |----main
| | |----java ——存放项目的.java文件
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件
| |----test
| | |----java ——存放所有测试.java文件,如JUnit测试类
| | |----resources ——存放项目资源文件,如spring, hibernate配置文件
|----target ——项目输出位置
|----pom.xml ----用于标识该项目是一个Maven项目
2.手动创建Maven项目
Maven遵循约定大于配置的原则。只要符合Maven规定的目录结构,就可以说是一个maven项目。学习Maven时手动创建一个Maven结构是一个不错的实践。
3.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/maven-v4_0_0.xsd"> <!--项目信息--> <modelVersion>4.0.0</modelVersion> <groupId>com.thunder.testproject</groupId> <artifactId>hello-world</artifactId> <version>1.0-SNAPSHOT</version> </project>
project:根节点元素,他还声明了一些与pom相关的命名空间和xsd文件,虽然这些不是必需的。但是它们可以使一些IDE工具帮助我们快速编辑POM文件。
modelVersion:指定当前POM模型版本,对于Maven2和Maven3来说,必须是4.0.0。
groupId:定义项目属于哪个组,一般的格式为->反写的公司网址.项目名
artifactId:定义了属于项目组的哪一个模块,一般为->项目名.模块名
version:版本,SNAPSHOT是快照的意思,意为正在开发的版本。
以上这些元素是构成pom的最基础的元素,groupId:artifactId:version可以看做一个坐标(coordinate),“坐标”可以唯一确定一个项目,它标注了项目在“仓库”中的位置。
又引出了”仓库”(repository)这个东西,当我们“构建”项目的时候,Maven会分析pom.xml中的配置,如果在“本地仓库”中找不到该“坐标”定位的项目,则会去“中央仓库”中下载。
“中央仓库”:存放了当今大部分流行的java开源项目,但由于“来自东方的神秘力量”的限制,国内访问该仓库可能出现链接问题,此时可以使用“镜像仓库”。
4.Maven命令
Maven生命周期的各个阶段会绑定一些插件,我们输入生命周期下的阶段,然后会按顺序执行绑定的插件。
创建了一个maven项目结构之后,可以将当前目录切到Maven项目下,然后执行mvn compile
之后会自动搜索src/main/java中的java文件,编译之后放到target/classes中
三、使用maven查找依赖冲突
Eclipse中的依赖树可以很方便的看到依赖