archetype
artifact
maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的
构建、报告和文档的软件项目管理工具
常用maven命令
mvn -v 查看maven版本
mvn compile 编译项目
mvn test 测试
mvn package 打包
mvn clean 将target目录在项目中删除
mvn install 将jar包安装到本地仓库中,根据pom中的依赖进行安装,如果没有会去maven的网上仓库中寻找并下载安装到本地仓库中
maven引入构建包的流程,首先mven compile 编译源代码,如果程序用到其它程序包,就去pom.xml查找是否引入该依赖包的坐标,groudId等,如果引入了jar包,就去本地仓库里面查找,如果本地仓库里面有这些jar包,就加入到项目classpath里面,如果没有该jar,就去网上的中央仓库里面查找并且下载,并将其放到本地仓库中,供我们的项目进行使用。
自动建立目录骨架
maven创建目录的两种方式
maven提供的archetype插件,用于创建符合maven规定的目录骨架。
- archetype:generate 按照提示进行选择
- archetype:generate -DgourpId=组织名,公司网址的反写+项目名称
-DartifactId=项目名-模块名
-Dversion=版本号
-Dpackage=代码所在的包名
实例 mvn archetype:generate -DgroupId=com.imooc.maven04 -DartifactId=maven04-demo -Dversion=1.0.0-SNAPSHOT -Dpackage=com.imooc.maven04-demo
项目管理利器(Maven)maven中的坐标和仓库
1、坐标:Maven世界中唯一标识一个构件的标识,一般由groupId/artifactId/version三部分组成,另外,作者建议artifactId和项目名要一致,这样更清晰,也更容易查找。
2、构件通过坐标作为其唯一标识。
3、仓库:
-本地仓库。
-远程仓库:maven-model-builder-3.3.3.jar\org\apache\maven\model, 超级pom.xml文件,
全球中央仓库地址:https://repo.maven.apache.org/maven2
4、修改本地仓库的位置:D:/Maven/repository
Ps:一旦配置了镜像仓库,那么先前的所有配置都会转到镜像仓库中。
默认仓库位置.m2 repository,将settings.xml复制到更改后的本地仓库中,这样maven版本更新了,也不用修改settings.xml了
项目构建周期
完整的项目构建过程包括:
清理、编译、测试、打包、集成测试、验证、部署
maven生命周期:
clean:清理项目
- pre-clean :执行清理前的工作
- clean:清理上一次构建生成的所有文件
- post-clean:执行清理后的文件
default:构建项目
- compile test package install
site:生成项目站点
- pre-site 在生成项目站点之前要完成的工作
- site 生成项目的站点文档
- post-site在生成项目站点后要完成的工作
- site-deploy发布生成的站点到服务器上
Pom.xml解析
pom.xml常用元素
modelVersion 指定了当前pom版本
groupId 反写的公司网址+项目名
artifactId 项目名+模块名
version 版本号 第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号 0.0.1snapshot快照
packaging 打包方式 默认是jar
name 项目的描述名
url 项目的地址
description 项目描述
developers 开发人员信息
licenses 许可证信息
dependencies
dependency
scope 依赖范围
optional 设置依赖是否可选,默认是false
exclusion 排除依赖传递列表
dependencyManagement 依赖管理 不会被运行
依赖的管理,一般定义在父模块中,由子模块去继承
build
plugins 插件列表(指出坐标)
parent 对父模块的继承
modules 定义多个模块 一起进行编译
依赖问题
依赖范围scope
Maven因为执行一系列编译、测试和部署运行等操作,在不同的操作下使用的classpath不同,依赖范围就是用来控制依赖与三种 classpath(编译classpath、测试classpath、运行classpath)的关系。
产生了依赖范围这个概念,就是指这三种classpath在什么时候有效,下面是依赖范围(三种classpath有效性的一个划分)的六种分类:
1.compile:默认范围,编译测试运行都有效 2.provided:在编译和测试时有效 3.runtime:在测试和运行时有效 4.test:只在测试时有效 5.system:在编译和测试时有效,与本机系统关联,可移植性差
6.import:导入的范围,它只使用在dependencyManagement中,表示从其他的pom中导入dependency的配置
依赖传递
如果不想将A项目导入的话,可以使用exclusions下设置exclusion,然后将A项目的坐标添加即可。
另外,在settings.xml文件中可以设置maven默认jre版本——使用标签
依赖冲突
不同版本的构件
1.短路优先
2.先声明先优先
如果路径长度相同,则谁先声明,先解析谁
聚合和继承
- 聚合:如果项目D依赖项目C,项目C依赖项目B,项目B依赖项目A,我们需要一个个安装这项项目,在Maven中有一种方式可以将多个项目一次性安装,这就是聚合的概念。简单讲就是,需要人工多次操作的,只要MAVEN能理解,一次性告诉他,他就能帮我们做这件单调烦人的事情了。
——使用 **<modules></modules>**
这个标签
**
- 继承:多次使用到的依赖,比如:单元测试,没有必要在所有的项目中都引用一下,此时就可以采用继承的方式来实现,先来一个父级的POM.XML然后再继承此POM.XML
注意:
- packaging 改为pom。
- dependencyManagement 中并不提取依赖。
- property中定义了unit版本号,之后可以引用。
- 父类parent中的main和test没有意义,可以删除。
groupid和artifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。
groupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artigactId是tomcat。
比如我创建一个项目,我一般会将groupId设置为cn.zr,cn表示域为中国,zr是我个人姓名缩写,artifactId设置为testProj,表示你这个项目的名称是testProj,依照这个设置,你的包结构最好是cn.zr.testProj打头的,如果有个StudentDao,它的全路径就是cn.zr.testProj.dao.StudentDao
http://www.mvnrepository.com/
maven插件搜索网址.