项目管理利器Maven

项目管理利器Maven

本博客是在慕课网慕课网学习的笔记。

  1. Maven介绍及环境搭建
  2. v

Maven介绍及环境搭建

Maven覆盖了 编译,测试,运行,清理, 打包和部署整个项目的构建周期。它提供了一个仓库的概念,同意的帮我们管理项目所依赖的第三方的jar包,最大可能的避免由于环境的配置不同所产生的在你的电脑上可以运行在我这里就不可以运行的 这些令人沮丧的问题。

Maven 是基于项目对象模型(POM),可以通过一小段信息来管理代码的构建,报告 和文档的软件项目管理工具

Maven 的下载与安装

  1. 下载maven http://maven.apache.org/
    bin目录包含mvn的运行脚本, 在windows的命令行中输入mvn 就会调用这些脚本。bin/m2.conf是一个配置文件
    • boot/plexus-classworlds-2.5.2.jar是一个类加载器的框架,maven用它来加载自己的类库。
    • conf 目录里面是配置文件比如 settings.xml
    • lib 目录下包含了maven的类库已经它依赖的第三方类库
  2. 环境变量的配置。
    • 新建M2_HOME变量,值为maven的安装目录。
    • 修改path,增加;%M2_HOME%\bin
    • 打开命令行,输入 mvn -v 验证是否安装配置成功

搭建Mave 项目

Maven项目目录结构:
Maven项目目录结构

Maven常用命令:

  • mvn -v 查看maven 版本
  • mvn compile编译
  • mvn test 测试
  • mvn package 打包 (compile, test 依此执行)
  • mvn clean 删除target
  • mvn install 安装jar包到本地仓库中

常用的构建命令介绍

Maven提供了Archetype插件创建符合maven规定的目录骨架。Archetype创建maven项目骨架的方式如下两种:

  • mvn archetype:generate 按照提示进行选择。第一次使用这个命令会下载一些依赖。
    填写group id等
  • mvn archetype:generate
    -DGroupId=组织名,通常是:公司网址的反写+项目名
    -DArtifactId=项目名-模块名
    -DVersion=版本号
    -DPackage=代码所存在的包名

Maven中的坐标和仓库

坐标和构件:在Maven的世界中任何的依赖,插件,项目构建的输出都可以称之为构件,所有构建均通过坐标作为其唯一的标识。 GroupID, ArtifactId,Version就是坐标,相当于地址。

仓库: 分为本地仓库和远程的maven中央仓库
镜像仓库:
国内的中央仓库的镜像

更改仓库的位置:不要放在C盘,如果重装系统什么的就会没有了。
取消注释并修改maven安装位置conf文件夹下的<localRepository>新的仓库路径</localRepository> 并且复制一份settings.xml到新的仓库路径

Eclipse中安装maven插件 以及创建maven项目

eclipse4.0以上,myeclipse中就不用单独安装maven插件。
在eclipse->preference->maven中可以设置settings.xml和本地仓库的位置。

Maven的生命周期和插件

生命周期

完整的项目构建过程包括:

清理,编译,测试,打包,集成测试,验证,部署。Maven将其进行抽象,定义了三套相互独立 的生命周期:

  1. Clean - 清理项目
    Clean这套生命周期分为三个阶段:
    • Pre-Clean :执行清理前的工作
    • Clean: 清理上一次构建生成的所有文件
    • Post-Clean: 执行清理后的文件
  2. Default - 构建项目 (最核心)
    • compile
    • test
    • package
    • install 等等
  3. Site - 生成项目站点(根据pom中的一些信息)
    • pre-site 在生成项目站点前要完成的工作
    • site 生成项目的站点文档
    • post-site 生成项目站点后要完成的工作
    • site-deploy 发布生成的站点到服务器上

插件

Maven有很多插件,包括核心插件 install package等Maven Plugins

POM 常用元素介绍

  • <project></project> 是pom的根元素,包含了pom的一些约束信息
  • <modelVersion></modelVersion>,是必须的。 指定了当前POM的版本
  • <groupId>反写的公司网址+项目名</groupId>
  • <artifactId>项目名+模块名</artifactId>
  • <version>0.0.0snapshot</version> 第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号,snapshot表示快照,alpha表示内部测试,beta表示公测,Release稳定版本,GA正式发布
  • <packaging></packaging> 打包方式,默认为jar,可以设置为war, zip, pom
  • <name></name> 项目描述名,产生项目文档的时候会使用到。
  • <url></url>
  • <description></description>
  • <developers></developers>
  • <licenses></licenses>
  • <organization></organization>
  • <dependencies>...<type></type></scope>test,provided...</scope><optional>true/false</optional><exclusions></exclusions></dependencies>
  • <dependencyManagement></dependencyManagement> 不会被执行,主要用于父模块中, 子模块继承用到的。
  • <build><plugins><plugin>...</plugin>...</plugins></build> 构建时候可以用插件
  • <parent></parent> 用于继承
  • <modules></modules> 聚合运行多个maven项目

依赖范围

三种classpath:
1. 编译
2. 测试
3. 运行
依赖范围是用来控制依赖于三种class path的关系的。
6种可用的 Maven Scop

依赖的传递

nage依赖bge, shanji依赖bge, 所以shanji依赖nange和bge. 所以依赖有传递性。 当然也可以通过<exclutions><exclution></exclution></exclutions> 来去除依赖。
可以在settings.xml中的profiles profile里面设置jdk的版本,就不用每次创建项目都要修改 jdk, 因为maven默认的jdk版本是1.5

依赖冲突

两条原则:
短路优先。比如下面你例子,A依赖的是V2的X jar:
A 依赖 B, B依赖 C, C 依赖 X(JAR V1)
A 依赖 D, D 依赖 X(JAR V2)

聚合和继承

聚合

新建一个项目用来聚合,并修改pom文件如下
聚合Pom

继承

新建一个项目,POM如下
继承POM
在需要继承的项目的pom中引入父pom
子项目继承