文章目录

  • 1.Maven的理解
  • 2.Maven仓库
  • 3.Maven“坐标”
  • 4.Maven的依赖管理
  • 5.maven工程的结构目录
  • 6.Maven基本命令
  • 7.Maven指令的生命周期
  • 8.Maven的概念模型
  • 9.pom 基本配置


1.Maven的理解

一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工具,它包含了一个项目对象模型 (POMProject Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

通俗的理解:如今我们构建一个项目需要用到很多第三方的类库,如写一个使用Spring的Web项目就需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌,并且Jar包之间的关系错综复杂,一个Jar包往往又会引用其他Jar包,缺少任何一个Jar包都会导致项目编译失败。

以往开发项目时,程序员往往需要花较多的精力在引用Jar包搭建项目环境上,而这一项工作尤为艰难,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。

而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar,极大提升开发效率。

2.Maven仓库

Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。

  • 本地仓库:Maven本地的Jar包仓库。
  • 中央仓库: Maven官方提供的远程仓库。

当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。

maven 解析excel maven理解_jar

3.Maven“坐标”

在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。

在 pom.xml 中定义坐标,内容包括:groupId、artifactId、version,详细内容如下:

<!--项目名称,定义为组织名+项目名,类似包名-->

<groupId> cn.xxx.maven<com/groupId>

<!-- 模块名称 -->

<artifactId>maven-first </artifactId>

<!-- 当前项目版本号,snapshot 为快照版本即非正式版本,release 为正式发布版本 -->

<version>0.0.1-SNAPSHOT</version>

<packaging > :打包类型

jar:执行 package 会打成 jar 包

war:执行 package 会打成 war 包

pom :用于 maven 工程的继承,通常父工程设置为 pom

如下代码中,groupId和artifactId构成了一个Jar包的坐标。

<dependency>
    <groupId>cn.missbe.web.search</groupId>
    <artifactId>resource-search</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
</dependency>
  • groupId:所需Jar包的项目名
  • artifactId:所需Jar包的模块名
  • version:所需Jar包的版本号

4.Maven的依赖管理

Maven 的一个核心特性就是依赖管理。当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成一项困难的任务。Maven 展示出了它对处理这种情形的高度控制。传统的 WEB 项目中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。那么maven 工程是如何使得工程变得很少呢?

分析如下:

maven 解析excel maven理解_生命周期_02

通过分析发现:maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar包的坐标,这样就很好的避免了 jar 直接引入进来,在需要用到 jar 包的时候,只要查找 pom.xml 文件,再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从而找到这些 jar 包,再把这些 jar 包拿去运行。

5.maven工程的结构目录

maven 解析excel maven理解_maven_03

作为一个 maven 工程,它的 src 目录和 pom.xml 是必备的。

进入 src 目录后,我们发现它里面的目录结构如下

maven 解析excel maven理解_jar_04

src/main/java —— 存放项目的.java 文件(核心代码部分)

src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件

src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类

src/test/resources —— 测试资源文件

target —— 项目输出位置,编译后的 class 文件会输出到此目录

pom.xml——maven 项目核心配置文件

6.Maven基本命令

  1. -v:查询Maven版本
    本命令用于检查maven是否安装成功。
    Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。
  2. compile:编译
    compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target
    目录下。
  3. test:测试项目
    执行test目录下的测试用例
  4. package:打包
    将项目打成jar包,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war包
  5. clean:删除target文件夹
    clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容
  6. install:安装
    将当前项目放到Maven的本地仓库中。供其他项目使用

7.Maven指令的生命周期

maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,

这三套生命周期分别是:

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle 生成项目报告,站点,发布站点

maven 解析excel maven理解_java_05

8.Maven的概念模型

Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑

maven 解析excel maven理解_maven 解析excel_06

  • 项目对象模型 (Project Object Model)

一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、

插件目标等。

  • 依赖管理系统(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>
  • 一个项目生命周期(Project Lifecycle)

使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些

过程规范为一个生命周期,如下所示是生命周期的各各阶段:

maven 解析excel maven理解_maven 解析excel_07

maven 通过执行一些简单命令即可实现上边生命周期的各各过程,比如执行 mvn compile 执行编译、

执行 mvn clean 执行清理。

  • 一组标准集合

maven 将整个项目管理过程定义一组标准,比如:通过 maven 构建工程有标准的目录结构,有

标准的生命周期阶段、依赖管理有标准的坐标定义等。

  • 插件(plugin)目标(goal)

maven 管理项目生命周期过程都是基于插件完成的。

9.pom 基本配置

pom.xml 是 Maven 项目的核心配置文件,位于每个工程的根目录,基本配置如下:

<project > :文件的根节点 .

<modelversion >: pom.xml 使用的对象模型版本

<groupId > :项目名称,一般写项目的域名

<artifactId > :模块名称,子项目名或模块名称

<version >:产品的版本号 .

<packaging >:打包类型,一般有 jar、war、pom 等

<name >:项目的显示名,常用于 Maven 生成的文档。

<description > :项目描述,常用于 Maven 生成的文档

<dependencies> :项目依赖构件配置,配置项目依赖构件的坐标

<build>:项目构建配置,配置编译、运行插件等