Maven概念
-
标准的目录结构
- *.java放在src/main/java目录下
- *.class在target目录下
- 配置及静态文件
PS:通过标准的目录结构,只需要将对应文件放置在指定位置,Maven就能自动进行管理了。
-
项目描述符,pom.xml
POM(Project Object Model)项目对象模型
-
xml文件
-
artifact可以认为为一个项目
-
packaging是项目类型有pom,jar,war
-
pom用于项目继承和多模块项目
-
jar用于java项目
-
war用于javaweb项目
-
坐标(groupId,artifactId,version),唯一标识一个项目
-
属性,${property}引用,相当于常量,可以去除重复
-
依赖,dependencies,可以依赖其他项目
-
构建配置,build,配置插件等
-
多项目、继承
-
项目总体信息
-
概念类比JAVA的继承或者覆盖(Override)
-
可继承项
-
坐标属性,如groupId
-
依赖配置,
-
插件配置
-
一般性信息,如开发者信息,项目协议
-
Root类,Super POM
-
所有的Maven项目都是直接或者间接的从Super POM继承下来的(如果没有指明父POM,则默认是继承Super POM)
-
是Maven的组成部分
-
Super POM定义了一组被所有项目共享的默认设置
-
默认的文件位置
-
统一的插件配置
-
默认的中央仓库配置
-
继承配置
-
使用parent元素
-
POM框架模型图
-
parent项目,类型是pom
-
定义modules
-
子模块(项目)中配置parent,继承父POM
-
配置多项目既会使用继承也会使用组合
-
dependencies,developers,contributors,plugin列表,resources是组合形式的
-
示意图
-
依赖坐标,(groupId,artifactId,version)
-
scope(范围)配置
-
compile(默认),编译时需要,打包也会放进去
-
provided,编译时需要,打包时不需要
-
用于继承的pom配置
-
dependencyManagement(依赖管理)
-
用于统一存储所有Maven项目共享的构建的空间
-
仓库分类
-
本地仓库(优先)
PS:Maven本地仓库默认路径为:${user.home}/.m2/repository
SwitchdeMacBook-Pro:maven-restaurant switch$ ls ~/.m2/repository/
antlr commons-collections jtidy velocity
asm commons-io junit xerces
backport-util-concurrent commons-lang log4j xml-apis
classworlds commons-logging net xmlpull
com dom4j org xpp3
commons-cli javax oro
commons-codec jdom plexus
SwitchdeMacBook-Pro:maven-restaurant switch$
-
-
远程仓库
-
本地仓库查找优先
-
提供Maven项目访问并下载构件至本地仓库
-
目录结构:/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaginh>
-
分类
-
中央仓库(Maven自带)
-
其他公共仓库(比如阿里云的Maven仓库)
-
私服(内部搭建的)
-
配置
-
使用配置文件setting.xml(对于所有项目,指定仓库)
-
在pom.xml为依赖指定repositories(对某一些项目指定仓库)
-
一个构建生命周期是一组精心组织的有序的阶段
-
每个阶段执行预先定义的动作
-
编译
-
打包
-
部署等
-
这些动作会根据项目的类型进行选择
-
三套独立的生命周期
-
clean(删除构建输出的东西,jar包,class文件之类的)
-
pre-clean(清除之前的预处理工作)—>clean(移除上次构建生成的文件)->post-clean(执行一些需要在clean之后完成的工作)
-
default
-
…->process-resources->compile->…->test->package->install->deploy
-
validate(验证项目完整性)
-
process-resources(将资源文件复制到目标目录下,打包需要)
-
compile(编译用户源代码)
-
test(单元测试)
-
package(打包,java项目打成jar包,web项目打成war包)
-
install(将包安装到本地仓库)
-
deploy(将包上传到远程仓库,其他开发人员可以通过远程仓库使用上传的包)
-
site(生成站点文档,开源项目使用较多)
-
pre-site->site->post-site->site-deploy
-
插件(Plugin)式架构,小引擎+大量插件
-
所有的插件本身也是一个Maven构件,由Maven仓库管理
-
每一个插件提供多个目标(Goal)
-
调用目标的格式
-
mvn <Plugin>:<Goal>
-
生命周期阶段与目标绑定
-
用户通过指定生命周期阶段就能够隐式的通过插件执行任务
-
mvn compile <——>mvn compiler:compile
-
对于package阶段,会根据项目类型不同,绑定到不同的目标(其他的阶段绑定都是固定的)
-
示意图
-
插件配置元素
-
groupId
-
artifactId
-
configuration配置项
-
查看插件提供的配置项:mvn help:describe -Dplugin=<plugin_name> -Dgoal=<goal> -Ddetail=true
-
例如:mvn help:describe -Dplugin=compiler -Dgoal=compile -Ddetail=true
-
对于继承的父pom
-
pluginManagement(插件管理)——参考dependencyManagement
-
plugins
-
mvn内建插件
-
help插件
-
mvn help:help -Ddetail=true(查看help插件的帮助文档)
-
tomcat7插件
-
exec插件(执行jar包)
-
自定义插件