您的位置:首页 > 其它

Maven核心概念

2016-08-16 14:45 204 查看

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,配置插件等



多项目、继承



项目总体信息

POM继承

概念类比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

Maven架构(插件和目标)

插件(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包)

自定义插件

Maven整体框架图



Maven使用整体流程



-------------参考《网易云课堂.Java Web开发入门》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息