maven介绍

来源:互联网 发布:怎么在淘宝里搜索店铺 编辑:程序博客网 时间:2024/06/05 23:54

maven介绍

项目开发中的问题及解决方案

maven解决了企业项目开发中的如下几个问题:

  • 问题1: 项目开发人员将功能开发完成,编译、打包、运行正常,而后提交到svn,测试人员从svn上获取代码后编译、打包、运行报错。
    解决方案:maven对项目生命周期进行定义,规范,开发人员和测试人员使用maven软件完成构建
    对此,我的理解是:maven提供了一套对项目生命周期管理的标准,开发人员和测试人员统一使用maven进行项目构建。项目生命周期管理指项目的整个构建过程,包括编译、测试、打包、部署、运行等。
  • 问题2:一个项目工程中时间长了开发人员也搞不清楚项目中的某些jar包的作用,用在哪些模块,不得不每过一段时间对每个jar包梳理一遍。
    解决方案:maven提供对项目所依赖的第三方构件统一管理,通过规范的依赖管理来管理依赖的jar包
    对此,我的理解是:maven可以对项目所依赖的第三方构件(即jar包)进行统一管理。这样,向工程中加入jar包就不要手工从其它地方拷贝了,直接通过maven定义jar包的坐标,自动从maven仓库中下载到工程中。
  • 问题3:项目使用的第三方框架要升级,从第三方框架官方网站下载jar包,加入工程,运行后报错,原来是第三方框架依赖的jar包版本冲突了。
    解决方案:maven提供对项目所依赖的第三方构件统一管理,通过规范的依赖管理来管理依赖的jar包的版本
  • 问题4:项目的模块很多,每次启动项目需要从svn获取全部模块的项目代码编译运行,由于工程大启动慢,工作效率低下。
    解决方案:maven对每个模块构建成一个一个独立的工程,每个模块构建成功将打成jar包发布到maven远程仓库,工程师每次运行工程只需要从仓库下载模块jar包即可不用对全部源码进行编译
    对此,我的理解是:maven对工程分模块构建,可提高开发效率。
  • 问题5:项目组编写了一个通用的工具类,其他项目组将类拷贝过去使用,工具类发现bug,修改后,通过邮件将工具类发送给各个项目组,这不是一个好的分发机制,太多的环节可能导致出现bug。
    解决方案:项目组将写的工具类通过maven构建,打成jar包,将jar包发布到公司的maven仓库中,公司其他项目通过maven依赖管理从仓库自动下载jar包
    对此,我的理解是:在实际开发中,公司一般会架设一台专门的maven私服(maven仓库),存储各个项目组所共享的jar包,还存储了从互联网下载的常用的jar包(如Struts2、Spring、Hibenrate、 SpringMVC、log4j……)

maven的概念模型

maven是Apache下的一个开源项目,它是一个项目管理工具,它用于对java项目进行项目构建、依赖管理及项目信息管理。当前使用maven的项在持续增长。
maven包含了一个项目对象模型(Project Object Mobel),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
maven的概念模型用图来表示即为:
这里写图片描述

  • 项目对象模型(Project Object Mobel)
    通过pom.xml定义项目的坐标、项目依赖、项目信息、插件目标等。每个maven工程中都有一个pom.xml文件(核心配置文件),该文件里面定义了工程所依赖的jar包、本工程的坐标、打包运行方式等。
  • 依赖管理系统(Dependency Management System)
    maven的基础核心,通过定义项目所依赖组件的坐标由maven进行依赖管理。也即maven通过坐标对项目工程所依赖的jar包进行统一规范的管理。
    比如:项目依赖Struts2.3.24,通过在pom.xml中定义依赖即可将Struts2的jar包自动加入到工程中,pom.xml中定义依赖如下:

    <dependency>    <groundId>org.apache.struts</groundId>    <artifactId>struts2-core</artifactId>    <version>2.3.24</version></dependency>
  • 一个项目生命周期(Project Lifecycle)
    一个软件开发人员每天都在完成项目的生命周期:清理、编译、测试、部署,有的手工完成,有的通过Ant(也是一个项目构建工具)脚本自动完成,maven将项目的生命周期抽象统一为:清理、初始化、编译、测试、报告、打包、部署、站点生成等。
    这里写图片描述
    maven就是要保证一致的项目构建流程,通过执行一些简单命令即可实现上边生命周期的各个过程。
  • 一组标准集合
    maven将整个项目管理过程定义一组标准,比如:通过maven构建工程有标准的目录结构,有标准的生命周期阶段、依赖管理有标准的坐标定义等。
    我在这儿还是强调一遍:maven工程有自己标准的工程目录结构、有标准的坐标定义。
  • 插件(plugin)目标(goal)
    maven管理项目生命周期过程都是基于插件完成的。

maven的仓库

maven工作需要配置仓库,本地的项目A、项目B等通过maven从远程仓库(可以理解为互联网上的仓库)下载jar包并保存在本地仓库,本地仓库就是本地文件夹,当第二次需要此jar包时则不再从远程仓库下载,因为本地仓库已经存在了。可以将本地仓库理解为缓存,有了本地仓库就不用每次从远程仓库下载了。
下面描述了maven中仓库的类型:
这里写图片描述

  • 本地仓库:用来存储从远程仓库或中央仓库下载的插件和jar包,项目使用一些插件或jar包,优先从本地仓库查找。
    我的理解:本地仓库就相当于缓存,工程第一次会从远程仓库(互联网)去下载jar包,将jar包存在本地仓库(在程序员的电脑上)。第二次不需要从远程仓库去下载,先从本地仓库找,如果找不到才会去远程仓库找。
  • 远程仓库:如果本地需要插件或者jar包,本地仓库没有,默认从远程仓库下载。
    可以理解为在我们公司内部架设一台私服,其它公司架设一台仓库,且对外公开,这样的仓库就可看作远程仓库。
  • 中央仓库:在maven环境内部内置一个远程仓库地址:http://repo1.maven.org/maven2,它是中央仓库(即特殊的远程仓库),服务于整个互联网,它是由maven团队自己维护的,里面由大量的常用类库,并包含了世界上大部分流行的开源项目构件。
    本地仓库没有的jar包,maven默认从中央仓库下载。
1 1