maven概述

Maven在美国是一个口语化的词语,代表专家,内行的意思

  一个对Maven比较正式的定义是这么说的,Maven是一个项目管理工具,它包含了一个项目对象模型(POM:Project  Object  Model),一组标注集合,一个项目生命周期(Project  Lifecycle),一个依赖管理系统(Dependency  Management  System),和用来运行定义在生命周期阶段(phase) 中插件(plugin)目标(goal)的逻辑

可以用更通俗的方式来说明。我们知道,项目开发不仅仅是写写代码而已,期间会伴随着各种 必不可少的事情要做,下面列举几个感受一下:

  1、我们需要引用各种 jar 包,尤其是比较大的工程,引用的 jar 包往往有几十个乃至上百个, 每用 到一种 jar 包,都需要手动引入工程目录,而且经常遇到各种让人抓狂的 jar 包冲突,版本冲突。

   2、我们辛辛苦苦写好了 Java 文件,可是只懂 0 和 1 的白痴电脑却完全读不懂,需要将它编译成二 进制字节码。

      好歹现在这项工作可以由各种集成开发工具帮我们完成,Eclipse、IDEA 等都可以将代 码即时编译。当然,如果你嫌生命漫长,何不铺张,也可以用记事本来敲代码,然后用 javac 命令一 个个地去编译,逗电脑玩。

   3、世界上没有不存在 bug 的代码,计算机喜欢 bug 就和人们总是喜欢美女帅哥一样。为了追求美为 了减少 bug,因此写完了代码,我们还要写一些单元测试,然后一个个的运行来检验代码质量。

   4、再优雅的代码也是要出来卖的。我们后面还需要把代码与各种配置文件、资源整合到一起,定型 打包,如果是 web 项目,还需要将之发布到服务器,供人蹂躏。

   试想,如果现在有一种工具,可以把你从上面的繁琐工作中解放出来,能帮你构建工程,管理 jar 包,编译代码,还能帮你自动运行单元测试,打包,生成报表,甚至能帮你部署项目,生成 Web 站 点,你会心动吗?

  Maven 就可以解决上面所提到的这些问题

maven依赖管理的概念

Maven 的一个核心特性就是依赖管理。当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成 一项困难的任务。Maven 展示出了它对处理这种情形的高度控制。 传统的 WEB 项目中,我们必须将工程所依赖的 jar 包复制到工程中,导致了工程的变得很大。那么 maven 工程是如何使得工程变得很少呢? 分析如下:

  通过分析发现:maven 工程中不直接将 jar 包导入到工程中,而是通过在 pom.xml 文件中添加所需 jar 包的坐标,这样就很好的避免了 jar 直接引入进来,在需要用到 jar 包的时候,只要查找 pom.xml 文 件,再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从 而找到这些 jar 包,再把这些 jar 包拿去运行。

   那么问题来了

     第一:”存放 jar 包的仓库”长什么样?

     第二:通过读取 pom.xml 文件中的坐标,再到仓库中找到 jar 包,会不会很慢?从而导致这种方式 不可行!

      第一个问题:存放 jar 包的仓库长什么样,这一点我们后期会分析仓库的分类,也会带大家去看我们 的本地的仓库长什么样。

      第二个问题:通过 pom.xml 文件配置要引入的 jar 包的坐标,再读取坐标并到仓库中加载 jar 包,这样我们就可以直接使用 jar 包了,为了解决这个过程中速度慢的问题,maven 中也有索引的概念,通过建立索引,可以大大提高加载 jar 包的速度,使得我们认为 jar 包基本跟放在本地的工程文件中再 读取出来的速度是一样的。这个过程就好比我们查阅字典时,为了能够加快查找到内容,书前面的 目录就好比是索引,有了这个目录我们就可以方便找到内容了,一样的在 maven 仓库中有了索引我 们就可以认为可以快速找到 jar 包

maven一键构建概念

  我们的项目,往往都要经历编译,测试,运行,打包,安装,部署等一系列过程

什么是构建?

  指的是项目从便不易,测试,运行,打包,安装,部署整个过程都交给maven进行管理,这个过程称为构建

一键构建

  指的是整个构建过程,使用maven一个命令可以轻松完成整个工作

Maven规范化构建流程如下 :

我们一起来看 Hello-Maven 工程的一键运行的过程。通过 tomcat:run 的这个命令,我们发现现在的 工程编译,测试,运行都变得非常简单。

最新文章

  1. Highchart插件简介和引入方式
  2. #pragma once与#ifndef #define ...#endif的区别
  3. Windows Server 2008 双网卡同时上内外网 不能正常使用
  4. 细说php一些常见的知识点
  5. 使用vs2010生成SQL Server 随机数据
  6. HoloLens开发手记 - Unity之Keyboard input 键盘输入
  7. iOS-CALayer
  8. java基础知识整理:
  9. PYTHON--定期监测服务器端口,并将结果写入MYSQL
  10. firefox因gnash cpu 高
  11. linux 下启动jar小程序
  12. HDU 1484 Basic wall maze (dfs + 记忆)
  13. 使用Nginx实现Tomcat集群负载均衡
  14. 西瓜视频蓝光1080P下载方法
  15. 记录自己使用GitHub的点点滴滴
  16. ORA-00338
  17. 【VMware vSphere】ESXi系统开启SSH协议
  18. Java语法基础学习DayEighteen(常用类)
  19. 转载 [ZooKeeper.net] 3 ZooKeeper的分布式锁
  20. 【洛谷p2142】高精度减法

热门文章

  1. uniapp - 设置代理
  2. MeterSphere中dubbo接口测试分享
  3. CF14D题解
  4. 初学银河麒麟linux笔记 第二章 虚拟机VMware16 共享文件
  5. 【C++】【纯代码】获取电脑的mac地址
  6. 使用Promethues和Grafana监控Flink
  7. JAVA的作用
  8. Python学习笔记(一)环境确认
  9. 一些sql查询的case
  10. 调度器30—调度相关结构体—p->flags