Maven概述

 

文件状态:

[ ] 草稿

[√] 正在修改

当前版本

1.0

历史修订版本

1.0;

作    者

杜有龙

完成日期

2019-09-18

 

  • 什么是Maven

Apache Maven是一个软件工程管理和整合工具。

Maven是一个采用纯Java编写(跨平台)的开源项目管理工具,Maven采用了一种被称之为对象模型(POM:Project Object Mode)的概念来管理项目,所有的项目配置信息都被定义在一个叫做pom.xml的文件中, 通过该文件,Maven可以管理项目的整个声明周期,包括清除、编译、测试、报告、打包、部署等。

核心功能:项目构建、依赖管理、项目管理工具。

官网地址为http://maven.apache.org

  • 产生背景

Mave开始是为了简化Jakarta Turbine项目中的构建过程而产生的。有几个项目,每个项目都有自己的Ant构建文件,这些项目都略有不同。我们想要一种标准的方法来构建项目,明确定义项目的内容,发布项目信息的简便方法以及在多个项目中共享JAR的方法。

目前Apache下绝大多数项目都已经采用Maven进行管理。

Maven本身还支持多种插件,可以方便更灵活的控制项目, 开发人员的主要任务应该是关注业务逻辑并去实现它,而不是把时间浪费在学习如何在不同的环境中去依赖jar包、项目部署等。Maven正是为了将开发人员从这些任务中解脱出来而诞生的一个项目管理工具。

后来,maven变成了一个强大的工具,现在可用于构建和管理任何基于Java的项目。 Apache Maven希望创建了一些东西,使Java开发人员的日常工作变得更加容易,并且通常有助于理解任何基于Java的项目。

  • Maven优势

1、优势与特性

  • Maven作为一个项目管理和整合工具,为开发者提供了一套完整的构建生命周期框架,maven简化了工程的构建过程,并对其进行标准化,maven无缝的链接了编译,发布,文档生成;
  • 开发者只需要使用很少的时间就可以自动完成工程的基础构建配置,因为maven使用了一个标准的目录结构和一个默认的构建生命周期;
  • 在多个开发团队的情况下,maven能够在很短的时间内使得每项工作按照标准进行;
  • Maven提供了一个可复用,可维护,更容易理解的工程模型,并提供了与这个模型交互的插件或者工具
  • 大部分的工程配置操作都非常的简单并且可复用,在创建报告,检查,和测试自动配置的时候,maven能够让开发者的工作变得更加的简单。

2、Maven和Ant比较

Apache Ant

  • Ant 没有正式的约定,如一个一般项目的目录结构,必须明确的告诉Ant哪里去找源代码,哪里放置输出;
  • Ant 是程序化的,必须明确的告诉Ant做什么,什么时候做。必须告诉它去编译,然后复制,然后压缩;
  • Ant 没有引入生命周期概念,必须定义目标和目标之间的依赖。必须手工为每个目标附上一个任务序列。(如果需要执行多个命令,需要多次输入,明确指定顺序)
  • 没有jar依赖管理

 

Apache Maven

  • Maven拥有约定,因为遵循了约定,它已经知道源代码在哪里。它将字节码放到 了target/classes中,然后在target 生成一个JAR文件。
  • Maven 声明式的。需要做的只是创建一个pom.xml 文件,然后将源代码放到默认的目录。Maven 会帮你处理其它的事情。
  • Maven 有一个生命周期。比如当运行命令mvn install 的时候,这条命令告诉 Maven 执行一系列的有序的步骤,直到达到你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
  • Maven引入jar包依赖管理
  1. Eclipse
  • 手工进行编译、测试、打包、部署
  • 每个人的环境不相同,导致相同的的代码在不同的机器出现不同的问题

 

  • Maven的功能

1、总览

Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(Dependency Management System), 和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当使用Maven的时候,用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。

"构建工具":一个用来把源代码构建成可发布的构件的工具。

别让Maven是一个"项目管理工具"的事实给吓跑。大多数情况下使用maven最多也就是管理项目的jar包依赖,特别是如何用maven来管理多个项目,细致的控制一个项目的生命周期

2、功能介绍

  • 项目构建
  • 什么是项目构建

 

 

  • 什么时候构建项目

  • 什么是理想的项目构建

标准化,高度自动化,跨平台,可重用的组件

  • 依赖管理

自动下载,统一依赖管理

  • 传统方式管理jar依赖的问题

jar冲突

jar依赖

jar体积过大

jar在不同阶段无法个性化配置

  • 使用maven方式管理jar依赖的好处

解决jar冲突

解决jar依赖问题

jar文件不用在每个项目保存,只需要放在仓库即可

maven可以指定jar的依赖范围

  • 发布
  • 文档生成
  • 报告
  • SCMs
  • 分发
  • 邮件列表

3、如Maven如何做单元测试

Maven 以插件的形式为一些一般的项目任务提供了内置的智能。

如果你想要编写运行单元测试,你需要做的只是将编写好的测试代码放到约定的目录/usr/local/my-home/jobs/production/workspace/ src/test/java中 ,添加一个JUnit 的测试范围依赖,然后运行 mvn test 。

如果想要部署一个web 应用而非 JAR ,需要做的是改变你的项目类型为 war ,然后把文档根目录置为  /usr/local/my-home/jobs/production/workspace/ src/main/webapp 。

当然,可以用 Ant 做这些事情,但是你将需要从零开始写这些指令。使用 Ant ,首先需要确定 JUnit JAR 文件应该放在哪里,然后需要创建一个包含这个 JUnit JAR 文件的 classpath ,然后告诉 Ant 它应该从哪里去找测试源代码,编写一个目标来编译测试源代码为字节码,使用 JUnit 来执行单元测试。

没有诸如 antlibs 和 lvy 等技术的支持(即使有了这些支持技术),Ant 给人感觉是自定义的程序化构建。项目中一组高效的坚持约定的 Maven POM ,相对于 Ant 的配置文件,只有很少的 XML 。Maven 的另一个优点是它依靠广泛公用的 Maven 插件。所有人使用 Maven Surefire 插件来运行单元测试,如果有人添加了一些针对新的测试框架的支持,你可以仅仅通过在你项目的 POM 中升级某个特定插件的版本来获得新的功能。

  • 特点
  1. pom.xml

maven工程结构和内容被定义在一个pom.xml文件当中,此文件是整个maven系统的基础组件。

2、约定优于配置

  • maven使用约定而不是配置,开发者不需要自己创建构建过程
  • 开发者不需要关心每一个配置细节,maven为工程提供了合理的默认行为
  • 创建maven工程的时候,maven会自动的创建默认的工程结构,开发者只需要合理的放置文件,而在pom文件中不再需要定义任何配置。
  • Maven模型

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐