Maven 介绍

Maven介绍

maven概念模型

Maven是Apache下的一个开源项目,它是一个创新的项目管理工具,它用于对Java项目进行项目构建、依赖管理及项目信息管理

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

项目对象模型(Project Object Model)

? 通过pom.xml文件定义项目的坐标、项目依赖、项目信息、插件目标、打包方式等。

依赖管理系统(Dependency Management System)

? 通过定义项目所依赖组件的坐标有maven进行依赖管理。

? 比如:项目依赖spring-context, 通过在pom.xml中定义依赖即可将spring-context的jar包自动加入到工程

一个项目生命周期(Project Lifecycle)

? 一个软件开发人员每天都在完成项目的生命周期:清理、编译、测试、部署,有的手工完成,有的通过Ant(项目构建工具)脚本自动完成,maven将项目生命周期抽象统一为:清理、初始化、编译、测试、 告、打包、部署、站点生成等。Maven就是要保证一致的项目构建流程,通过执行一些简单的命令即可实现上面生命周期的各个过程

插件(plugin)目标(goal)

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

项目构建工具

  1. Ant
    ??最早的构建工具,基于IDE,在2000年左右诞生,是当时最流行的 java 构建工具,不过它的 XML 脚本编写格式使得 XML 文件特别大,但是其对工程构建过程中的过程控制得特别好。

  2. Maven
    ??项目对象模型,通过其描述信息来管理项目的构建, 告和文档的软件项目管理工具。它填补了 Ant 的缺点,仍然采用 XML 作为配置文件格式,第一次支持了从 络上下载的功能,只需给定依赖的 URL,Maven便会自动将依赖 jar 包下载到本地。Maven 专注的是依赖管理,使用 java 编写。

  3. Gradle
    ??结合了以上两个的优点,继承了 Ant 的灵活性和 Maven 的生命周期管理,它最后被 google 采用,作为 Android 的御用管理工具。它与前两个相比最大的区别在于不用 XML 作为配置文件格式,采用了 DSL 格式,使得脚本更加简洁。

目前市面上 Ant 版本比较老,所以一般是一些比较传统的软件公司使用;Maven 使用 java 编写,是当下大多数互联 公司会使用的一个构建工具;Gradle 是用 groovy 编写的,是目前比较新型的构建工具,一些初创互联 公司会使用,以后有很大的使用空间

Maven四大特性

  1. 依赖管理
    ??Maven 为 java 世界引入了一个新的依赖管理系统:jar 包管理。当需要使用某个 jar 包时,不需要再从 络上下载并导入了,只需要配置其依赖即可;而当 jar 包需要升级时,也不需要重新下载最新的包并重新导入,只要修改 pom.xml 配置文件即可。在 java 世界中,可以用 groupId、artifactId、version 组成的 Coordination(坐标)唯一标识一个依赖。

同时,任何基于 Maven 构建的项目自身也必须定义这三项属性,生成的包可以是 jar 包,也可以是 war 包。一个典型的依赖引用如下所示:

坐标属性的理解
??Maven 坐标为各种组件引入了秩序,任何一个组件都必须定义自己的坐标
groupId:定义当前Maven项目隶属的实际项目-公司名称(jar 包所在仓库路径)。由于 Maven 中模块的概念,因此一个实际项目往往会被划分为很多模块。比如 Spring 是一个实际项目,其对应的 Maven 模块会有很多,如spring-core、spring-webmvc等。
artifactId:该元素定义实际项目中的一个 Maven 模块-项目名,推荐的做法是使用实际项目名称作为 artifactId 的前缀。比如,spring-bean、spring-webmvc等。
version:该元素定义 Maven 项目当前所处的版本
2. 多模块构建
??项目复查时,使用将 dao、service、controller 层分离的方式,将一个项目分解为多个模块已经是一个很通用的方式。

在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM。在该 POM 中可以使用 标签来定义一组子模块。parent POM 不会有什么实际构建产出,而 parent POM 中的 build 配置以及依赖配置都会自动继承给子模块。

  1. 一致的项目结构
    ??在 Ant 时代,大家创建 java 项目目录时比较随意,然后通过 Ant 配置指定哪些属于 source,哪些属于 testSource等。并且,不同的 IDE (IDEA和Eclipse)创建项目时,目录结构是不一样的,这就会导致两种 IDE 的项目不能兼容导入。而 Maven 在设计之初的理念就是 “Conversion over configuration”(约定大于配置),其制定了一套统一的项目目录结构作为标准的 java maven 项目结构,解决了不同 IDE 带来的文件目录不一致问题,只要是 Maven 项目,在各个 IDE 中建立的项目结构都是一样的。

  2. 一致的构建模型和插件机制
    ??在编写 JavaWeb 项目时需要使用类似 tomcat 的服务器,我们可以通过插件的形式将服务器引入进来。例如,如果需要使用 jetty 的服务器,可以通过下面的配置将 jetty 服务器引入进来

maven的仓库

maven工程需要配置仓库,本地的项目A项目B等通过maven从远程仓库( 络上的仓库)下载jar包并存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不需要从远程仓库下载,因为本地仓库已经存在了,可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载

Maven仓库类型:

  1. 本地仓库:用来存储远程仓库货中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找
  2. 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认去远程仓库下载
  3. 中央仓库:在maven环境内部内置一个远程仓库地址http://repo1.maven.org/maven2,它是中央仓库,服务于整个互联 ,它是由maven自己维护,里面有大量的常用类库,并包含该了世界上大部分流行的开源项目构件

项目生命周期

Maven有三套项目独立的生命周期,相互独立:

  • Clean Lifecycle在进行真正的构建之前进行一些清理工作
  • Default Lifecycle构建的核心部分,编译、测试、打包、部署等等
  • Site Lifecycle生产项目 告、站点、发布站点

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树Java概览Maven基础93810 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月8日
下一篇 2021年4月8日

相关推荐