Maven是个啥?

Maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理,并且Maven是跨平台的,这意味着无论是在Windows上,还是在Linux或者Mac上,都可以使用同样的命令。

构建(build)又是个啥?

每天来公司第一件事情就是拉取最新代码,然后进行单元测试(如果失败了还需要跟相关开发的同事一起调试,并修复错误的代码),然后编写自己的单元测试和写业务代码。

仔细回想下每天的工作,除了编写代码,我们每天有相当一部分时间花在了编译,单元测试,生成文档,打包,部署等繁琐且不起眼的工作上面,这就是构建。

于是有人用软件的方法让这一系列工作完全自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,所有烦琐的步骤都能够自动完成,很快就能得到最终结果,Maven就是这样一个工具,能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。

使用Maven的好处

Maven最大化地消除了构建的重复,抽象了构建生命周期,并且为绝大部分的构建任务提供了已实现的插件,我们不再需要定义过程,甚至不需要再去实现这些过程中的一些任务。最简单的例子是测试,我们没必要告诉Maven去测试,更不需要告诉Maven如何运行测试,只需要遵循Maven的约定编写好测试用例,当我们运行构建的时候,这些测试便会自动运行。

想象一下,Maven抽象了一个完整的构建生命周期模型,这个模型吸取了大量其他的构建脚本和构建工具的优点,总结了大量项目的实际需求。如果遵循这个模型,可以避免很多不必要的错误,可以直接使用大量成熟的Maven插件来完成我们的任务(很多时候我们可能都不知道自己在使用Maven插件)。此外,如果有非常特殊的需求,我们也可以轻松实现自己的插件。

Maven还有一个优点,它能帮助我们标准化构建过程。在Maven之前,十个项目可能有十种构建方式;有了Maven之后,所有项目的构建命令都是简单一致的,这极大地避免了不必要的学习成本,而且有利于促进项目团队的标准化。

在这个开源的年代里,几乎任何Java应用都会借用一些第三方的开源类库,这些类库都可通过依赖的方式引入到项目中来。随着依赖的增多,版本不一致、版本冲突、依赖臃肿等问题都会接踵而来。手工解决这些问题是十分枯燥的,幸运的是Maven提供了一个优秀的解决方案,它提供了中央仓库,通过一个坐标系统准确地定位每一个构件(artifact),也就是通过一组坐标Maven能够找到任何一个Java类库(如jar文件)。Maven给这个类库世界引入了经纬,让它们变得有秩序,于是我们可以借助它来有序地管理依赖,轻松地解决那些繁杂的依赖问题。

通过一些Maven的衍生工具(如Nexus),我们还能对其进行快速地搜索。只要定位了坐标,Maven就能够帮我们自动下载,省去了手工劳动。

ps:

本篇文章内容主要介绍了什么是Maven,以及为什么推荐使用Maven。

最新文章

  1. mysql 操作杂记
  2. 直播CDN架构随想
  3. Address already in use: JVM_Bind<null>:80
  4. Solution中的auto test case组织方式
  5. python27读书笔记0.1
  6. linux 搭建pptpd vpn(转,备忘)
  7. hadoop错误java.io.IOException Failed to replace a bad datanode on the existing pipeline due to no more good datanodes being available to try
  8. [O] SQLite数据库报错:no such column
  9. href 里面 链接前面加/与不加的区别?(绝对路径与相对路径)
  10. Python进阶内容(四)--- 迭代器(Iterator)与生成器(Generator)
  11. [学习OpenCV攻略][004][播放AVI视频]
  12. R实战 第三篇:数据处理(基础)
  13. Elcipse安装gradle插件
  14. C#超简单自定义事件
  15. html 获取数据并发送给后端方式
  16. Tensorflow搞一个聊天机器人
  17. Docker --rm 自动清理容器内部临时文件
  18. NOI2018Day2T1 屠龙勇士 set 扩展欧几里德 中国剩余定理
  19. WPF 滚动文字控件MarqueeControl
  20. svn 启动命令讲解

热门文章

  1. 测试Python类成员的单下划线,双下划线,两头下划线的区别
  2. 机器学习笔记—K-均值聚类
  3. Spring 集成rabbiatmq
  4. mock数据
  5. fio测试freenas共享的iscsi磁盘性能
  6. numpy.random之常用函数
  7. 河南省多校联盟二-F 线段树+矩阵
  8. 【Python】__all__ 暴露接口
  9. mysqldb 安装
  10. Spring入门4.AOP配置深入