maven是apache的一个开源的项目管理工具,它将项目开发和管理的过程抽象成一个项目对象模型,开发人员只需要更改添加配置文件里的依赖即可批量完成项目的各种构建等。
1.核心特征:依赖管理
maven可以对成千上万个模块或者子项目进行高度控制,批量管理它们之间的依赖关系。
任何基于maven构建的项目自身也必须要定义以下三个属性:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-context-indexer</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
</dependencies>
随便想用什么版本什么功能的jar包,ctrl s了xml文件之后它都能自动把jar包下载下来。
其中groupId一般是定义当前的maven项目属于哪个组(一般可以写公司域名的反写),artifactId定义实际项目中的一个maven模块-项目名,比如spring是一个实际的项目,里面有很多个不同的模块,比如可以起名为:spring-core,spring-webmvc等等。
groupid和artifactId被统称为“坐标”,是为了保证项目唯一性而提出的,如果要把你项目弄到maven本地仓库去,想要找到你的项目就必须根据这两个id去查找。
version是定义maven项目当前所处的版本。jar包不需要我们下载拷贝到项目中,之间写配置文件即可。当项目非常大需要大量jar包时,就特别方便,只需要写这种dependency依赖即可。
2.多模块构建
多模块有两个问题:重复操作问题的解决和重复配置问题的解决。在maven中需要定义一个parentPOM作为一组module的聚合POM。在该POM中可以使用<modules>标签赖定义一组子模块。parentPOM不会有什么实际的构建产出。而parentPOM中的build配置以及依赖配置都会自动继承给子module。
3.一致的项目结构
之前我们写的项目在不同的编译器里生成的目录是不同的,比如eclipse和idea就不大一样,但是maven解决了这个问题,它在任何idea中创建的项目目录结构都是一样的。
4.一致的构建模型和插件机制
通过统一的pom.xml文件来配置tomcat、jetty等插件,非常方便。比如之前构建一个web项目还要各种配置tomcat服务器等的,就很麻烦。