系列
第一章 Maven 介绍
第二章 Maven 安装与配置
第三章 Maven 核心概念介绍
第四章 Maven 常用命令
前言
我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种问题需要解决,比如:
- 我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。
- 我们辛辛苦苦写好了 Java 文件,可是只懂 0 和 1 的白痴电脑却完全读不懂,需要将它编译成二进制字节码。好歹现在这项工作可以由各种集成开发工具帮我们完成,Eclipse、IDEA 等都可以将代码即时编译。当然,如果你嫌生命漫长,何不铺张,也可以用记事本来敲代码,然后用 javac 命令一个个地去编译,逗电脑玩。
- 世界上没有不存在 bug的代码,计算机喜欢 bug就和人们总是喜欢美女帅哥一样。为了追求美为了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。
- 再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型打包,如果是 web项目,还需要将之发布到服务器,供人蹂躏
如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站点,你会心动吗?Maven 就可以解决上面所提到的这些问题。
一、Maven是什么?
Maven
是 Apache
推出的一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven
可以从一个中心资料片管理项目构建,报告和文件。Maven
提供了开发人员构建一个完整的生命周期框架。开发团队可以自动完成项目的基础工具建设,Maven
使用标准的目录结构和默认构建生命周期。在多个开发团队环境时,Maven
可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven
让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。
在多个开发团队环境时,Maven
可以设置按标准在非常短的时间里完成配置工作。由于大部分项目的设置都很简单,并且可重复使用,Maven
让开发人员的工作更轻松,同时创建报表,检查,构建和测试自动化设置。概括地说,Maven
起到了简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven
增加可重用性并负责建立相关的任务。
二、Maven POM
POM
( Project Object Model,项目对象模型 ) 是 Maven
工程的基本工作单元,是一个XML文件。它包含了项目的基本信息,用于描述项目如何构建,声明项目依赖,等等。执行任务或目标时,Maven
会在当前目录中查找 POM
。它读取 POM
,获取所需的配置信息,然后执行目标。
所有 POM
文件都需要 project
元素和三个必需字段:groupId
,artifactId
,version
。
节点 | 描述 |
---|---|
project工程的根 | 标签 |
modelVersion | 模型版本需要设置为 4.0 。 |
groupId | 这是工程组的标识。它在一个组织或者项目中通常是唯一的。通常是项目的域名反写。 |
artifactId | 这是工程的标识,即工程的名称。 |
version | 这是工程的版本号。在artifact的仓库中,它用来区分不同的版本。 |
示例如下:
<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">
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,域名反写 -->
<groupId>com.woniuxy</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>projectName</artifactId>
<!-- 版本号 -->
<version>1.0</version>
</project>
三、Maven架构图解
Maven
通过在核心配置文件 settings.xml
中配置 本地仓库
、中央仓库
、以及私服
。然后在项目中通过包的依赖关系优先从本地仓库中查找对应资源。如果本地仓库中不存在资源,则通过网络的形式在中央或其他仓库中去下载对应的依赖资源。