首先,一个对 Maven 比较正式的定义是这么说的:
Maven 是一个项目管理工具,它包含了一个项目对象模 型 (POM:Project Object Model)一组标准集合,
一个项目生命周期(Project Lifecycle),
一个依赖管 理系统(Dependency Management System),
和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑。
可以用更通俗的方式来说明。我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种
必不可少的事情要做,下面列举感受一下:
我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用
到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突
那么maven就可以帮我们解决这个问题
传统的 WEB 项目中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。那么
maven 工程是如何使得工程变得很少呢?
![](https://i-blog.csdnimg.cn/blog_migrate/42670a3b99f2ec11d14661dc200c7ffd.png)
通过分析发现:
maven
工程中不直接将
jar
包导入到工程中,而是通过在
pom.xml
文件中添加所需
jar 包的坐标,这样就很好的避免了 jar
直接引入进来,在需要用到
jar
包的时候,只要查找
pom.xml
文 件,再通过 pom.xml
文件中的坐标,到一个专门用于
”
存放
jar
包的仓库
”(maven
仓库
)
中根据坐标从 而找到这些 jar
包,再把这些
jar
包拿去运行。
Maven
工程的目录结构
![](https://i-blog.csdnimg.cn/blog_migrate/5c066b782159c22a7e815f82fe3ebd1a.png)
作为一个
maven
工程,它的
src
目录和
pom.xml
是必备的。
进入
src
目录后,我们发现它里面的目录结构如下:
![](https://i-blog.csdnimg.cn/blog_migrate/4be191f7c6be6190bea9a0183113d6ca.png)
src/main/java
—— 存放项目的
.java
文件
src/main/resources
—— 存放项目资源文件,如
spring, hibernate
配置文件
src/test/java
—— 存放所有单元测试
.java
文件,如
JUnit
测试类
src/test/resources
—— 测试资源文件
target
—— 项目输出位置,编译后的
class
文件会输出到此目录
pom.xml
——
maven
项目核心配置文件
依赖管理系统
(Dependency Management System)
通过
maven
的依赖管理对项目所依赖的
jar
包进行统一管理。
比如:项目依赖
junit4.9
,通过在
pom.xml
中定义
junit4.9
的依赖即使用
junit4.9
,如下所示是
junit4.9
的依赖定义:
<!--
依赖关系
-->
<dependencies>
<!--
此项目运行使用
junit
,所以此项目依赖
junit -->
<dependency>
<!-- junit
的项目名称
-->
<groupId>junit</groupId>
<!-- junit
的模块名称
-->
<artifactId>junit</artifactId>
<!-- junit
版本
-->
<version>4.9</version>
<!--
依赖范围:单元测试时使用
junit -->
<scope>test</scope>
</dependency>