maven是一个项目管理和综合工具,在多个开发团队合作时,maven可以设置按标准在非常短的时间内完成配置工作。
生命周期
maven有三套生命周期:clean lifecycle, default lifecycle,site lifecycle;
clean lifecycle: pre-clean -> clean -> post-clean
default lifecycle:pre-resource -> compile -> test-compile -> test -> package -> install -> deploy
site lifecycle:pre-site -> site -> post-site -> site-deploy
注:执行生命周期中某一阶段,会默认执行其之前的所有阶段
常用命令
- 编译项目:mvn compile
- 编译测试代码:mvn test-compile
- 单元测试:mvn test
- 构建项目:mvn package
- 清理项目:mvn clean
- 将项目安装到maven本地资源库: mvn install
- 生成基于maven的项目文档站点:mvn site
- 部署远程仓库:mvn deploy
- 部署基于maven的war文件到tomcat: mvn tomcat:deploy
- 查看父pom:mvn help:effective-pom
- 查看依赖树:mvn dependency:tree
- 本地打包过滤掉test:mvn clean package -Pdev -Dmaven.test.skip=true
resources
本地仓库:用来存储项目的依赖库,默认文件夹是.m2目录
中央仓库:用来下载所有项目依赖库的默认位置
私服:公司仓库Nexus
pom文件
一些标签:
- finalname:定义项目打包名称
- profile:配置响应的环境,dev,betamagic,prod
- dependency元素:
- type:依赖类型,默认为jar,对应构建定义的packaging
- scope:依赖范围(见下一节)
- optional:依赖是否可选
- exclusions:排除依赖传递
依赖归类
在propertie标签内声明常量,在版本处使用该常量;只要groupid和version一样就可以归类
例子:
|
|
聚合
使用一个命令同时构建多个模块
父工程执行mvn package可以打包其自己及其所有子工程,在父工程中,将
继承
- 父pom包含dependdencymanagement,子pom用dependency即可,可以不指定版本号;
- 子pom中,groupId和version可以直接继承父pom,不需要指定,artifactId必须与父pom不一样
依赖冲突
重复类:在不同的jar包里,有一样类名的类。
|
|
默认执行规则:
A->C 1.0(used) 就近原则
B->C2.0
A->B->C 1.0
D->C 2.0(used) 层少原则
如果固定要一个版本,可以在dependencymanagement指定:
|
|
scope依赖范围
scope是dependency的子标签,规定包得作用域
- compile: 默认,写代码时可以用,打包之后会被放在lib的目录
- provide: 与compile相似,可以在代码中直接引用,但是不会在lib目录下生成。实现在容器里(tomcat)。
- runtime:运行时才能使用包,在写代码是不能使用的。例如:slf4j、log4j、commons-log、logback等打log的包和mysql的dirver类。可以直接修改pom文件,实现接口api编程.
- test:只有在测试的时候可以引入 @TEST
maven测试
在java目录下,需要测试的类中,快捷键ctrl+shift+t,选择junit4和要测试的方法,可以自动生成测试类及其方法,自己实例化类,调用对象方法验证;
如果需要加载资源,需要在测试类中添加:
|
|