项目管理----Maven

maven介绍及环境搭建

Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。maven官方网址:http://maven.apache.org,maven安装目录下包含了4个文件夹:bin,boot,conf,lib。

  • bin目录包含了mvn的运行脚本
  • boot目录包含了一个类加载器的框架
  • conf是配置文件目录
  • *lib目录下包含了maven用到的所有的类库,除了maven自身的类库,还包含了一些第三方的依赖的类库

maven常用的构建命令

  • mvn -v : 查看maven版本
  • mvn compile : 编译
  • mvn test : 测试
  • mvn package : 打包
  • mvn clean: 删除target
  • mvn install: 安装jar包到本地仓库中

maven自动建立目录骨架

  • achetype:generate,按照提示进行选择
  • achetype:generate -DgroupId=组织名,通常为公司网址的反写+项目名 -DartifactId=项目名-模块名 -Dversion=版本号 -Dpackage=代码所存在的包名

maven中的坐标和仓库

在Maven中,任何依赖(jar包,tomcat等),或项目(自己打包的jar,war等)输出都可称为构件。每个构件都有自己的唯一标识(唯一坐标),由groupId,artifactId,和version等信息构成,由此,Maven就可以对构件进行版本控制,管理。maven的构件都存放在仓库中,仓库又分为: 本地仓库和远程仓库,当在本地仓库查找不到构件时,maven会通过在远程的中央仓库中查找。 maven的全球仓库地址的查找:在maven安装目录的lib目录下找到maven-model-builder.jar,在这里面,maven为我们提供了一个super pom,我们所配置的pom都是继承了这个pom的 ,这个pom中配置了一个repository,其中的url就是全球的中央仓库地址。中央仓库中包含了非常多的开源框架和项目。镜像仓库:我们有时候可能访问不到外网的仓库,所以我们需要访问国内的镜像仓库,这样更加稳健,在maven的conf文件夹下有一个settings.xml文件,它为我们提供了一个mirror标签的示例:

<mirror>
    <id>mirrorIdid>
    <mirrorOf>repositoryIdmirrorOf>
    <name>Human Readable Name for this Mirror.name>
    <url>http://my.repository.com/repo/pathurl>
mirror>

如何更改仓库位置:maven本地仓库的位置默认在电脑用户的.m2文件夹下,我们可以在电脑中自定义一个工作空间作为maven的本地仓库,然后在maven的settings.xml中找到localRepository标签,直接将这个本地仓库的路径复制到标签下就可以成功修改maven本地仓库的位置了。

maven的生命周期和插件

完整的项目构建过程包括:清理、编译、测试、打包、集成测试、验证、部署。
maven生命周期:
1.clean : 清理项目
(1)pre-clean,执行清理前的工作
(2)clean,清理上一次构建生成的所有文件
(3)post-clean,执行清理后的文件
2.default : 构建项目
compile、test、package、install
3.site : 生成项目站点
(1)pre-site,在生成项目站点前要完成的工作
(2)site,生成项目的站点文档
(3)post-site,在生成项目站点后要完成的工作
(3)site-deploy,发布生成的站点到服务器上

maven pom.xml解析

  • pom.xml常用元素介绍
    1.project,pom.xml的根元素,它包含了一些约束的信息
    2.modelVersion,指定了当前pom的版本
    3.groupId,主项目的标识,用于定义当前maven属于哪个实际的项目
    4.artifactId,模块的标识,指定实际项目中的模块
    5.version,当前项目的版本号,第一个数字表示大版本号,第二个数字表示分支版本号,第三个数字表示小版本号,snapshot快照,alpha内测,beta公测,Release稳定,GA正式发布
    6.packaging,指定了maven项目的打包方式,默认是jar,还可以打包成war,zip,pom等类型
    7.name,项目描述名
    8.url,项目地址
    9.description,项目描述
    10.developers,开发人员信息
    11.licenses,许可证信息
    12.organizations,组织信息
    13.dependencies,依赖列表
    14.dependency,依赖项
    15.type,依赖类型
    16.scope,依赖范围
    17.optional,设置依赖是否可选,默认是false,即子项目默认继承依赖,如果为true,子项目必须显式的引入该依赖
    18.exclusion,排除依赖传递列表
    19.dependencyManagement,依赖的管理,在该标签里可以声明依赖列表,但是依赖不会被运行,主要用于定义在父模块中,供子模块继承
    20.build,为构建的行为提供相应的支持
    21.plugins,插件的列表
    22.plugin,插件
    23.parent,通常用于在子模块中对于父模块pom的继承
    24.modules,聚合运行多个的maven项目,可以指定多个module一起进行编译
    25.module,模块
  • maven依赖范围
    项目开发时,如果要使用某个框架,就要将该框架的jar包引入到项目的classpath路径中,这样项目就能使用框架中封装好的方法,maven中为项目提供了三种classpath:1.编译,2.测试,3.运行。依赖范围就是用来控制依赖与三种classpath的关系的。在官方的文档中,依赖范围给定的值有6种:compile,provided,runtime,test,system,import,其默认值为compile,表示编译运行测试都有效,而provided表示在编译和测试时有效,runtime表示在测试和运行时有效,test表示只在测试时有效,system指定的范围与provided一样,但它与本机系统相关联,可移植性差,import表示导入的范围,它只使用在dependencyManagement中,表示从其它的pom中导入dependency的配置。
  • maven依赖传递
  • maven依赖冲突
    1.短路优先
    maven会优先解析路径短的依赖版本,比如有A->B->C->X(jar)和A->D->X(jar)两个依赖版本,会优先解析第二个版本
    2.先声明者优先
    如果路径长度相同,则谁先声明,先解析谁
  • 聚合和继承

你可能感兴趣的:(项目管理)