依赖配置
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.meteor</groupId>
<artifactId>Kitchen</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
- 依赖坐标,groupId,artifactId,version。
- scope配置。
- compile,默认,依赖范围:在编译时用,在打包时也会把这个依赖打包进去。
- provided,在编译时用,打包就不用了。有些依赖,在部署的时候容器会提供,如servelt-api这个依赖。打包的时候就不需要这个依赖了,就可以声明称provided。
- 用于继承的pom配置
- dependencyManagement。如果一个依赖在所有子pom中都要用,可以在父pom中dependencies标签上面添加dependencyManagement标签。
仓库
- 仓库用于统一存储所有Maven项目,共享的构建的空间。
- 仓库分类
- 本地仓库,很多时候用来做缓存的,本地没有的依赖会从远程仓库下载,以后再用也不用重新下载。Maven本地仓库默认路径为:${user.home}/.m2/repository。
- 远程仓库。
- 本地仓库查找优先。
- 提供Maven项目访问并下载构建至本地仓库。
/<groupId>/<artifactId>/<version>/<artifactId>-<version>.<packaging>
Maven项目在远程仓库的存放路径,通过项目的坐标可以拼出来。- 分类。
- 中央仓库,The Central Repository。
- 其他公共仓库,镜像库,阿里云Maven仓库。
- 私服,公司内部,相当于做一个代理,仓库管理器Artifactory和Nexus。
- 配置
- 使用配置文件settings.xml。
- 在pom.xml为依赖指定respositories。
构建生命周期
- 一个构建生命周期是一组精心组织的有序的阶段 。
- 每一个阶段执行预先定义的”动作”。
- 编译
- 打包
- 部署
- 这些“动作”会根据项目的类型进行选择。
三套独立的生命周期:
- clean,删除整个项目构建的输出。
- pre-clean->clean->post-clean
- site,生成站点文档的,在开源项目中用的多。
- pre-site site post-site site-deploy
- default,默认的生命周期。
- … process-resources,compile … test package,install,deploy
- validate,验证项目是否正确,验证完整的构建过程必要的信息是否有缺少的。
- process-resources,将资源文件复制,复制到目标目录下,以后打包用。
- compile,编译源代码。
- test,单元测试。
- package,将编译好的代码进行打包。
- install,将一个包安装到本地仓库,在本地开发时,其他项目如果依赖了这个项目,其他项目就可以直接查。
- deploy,将包上传到远程仓库。
Maven架构
- 插件(plugin)式架构,由一个很小的引擎加上Maven插件构成的。
- 所有的插件本身也是一个Maven构建,由Maven仓库管理。
- 每一个插件提供多个目标(Goal)。
- 调用目标的格式。
mvn <Plugin>:<Goal>
如:mvn tomcat7:run。
插件目标绑定构建生命周期
- 生命周期阶段与目标绑定。
- 用户通过指定生命周期阶段就能够隐式的通过插件执行任务,如:mvn compile实际上执行的是:mvn compiler:compile。
- 对于package阶段,会根据项目类型不同,绑定到不同的目标。jar、war等。
插件配置
<build>
<finalName>Restaurant</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8181</port>
<uriEncoding>UTF-8</uriEncoding>
<finalName>Restaurant</finalName>
<server>tomcat</server>
</configuration>
</plugin>
</plugins>
</build>
- 插件配置元素:groupId、artifactId、version、configuration。
- 查看当前插件的configuration有哪些配置参数,
mvn help:describe -Dplugin=<plugin_name> -Dgoal=<goal> -Ddetail
。
- mvn help:describe -Dplugin=compiler -Dgoal=compile -Ddetail=true
- 对于继承的父pom的插件继承,使用pluginManagement标签。
常见的插件
- mvn内建插件
- compiler等。
- help插件,帮助文档。
- mvn help:help -Ddetail=true
- tomcat7插件。
- exec,对java代码来说,可以把jar包跑起来。
- 更多插件。
- 自定义插件。
总结 pom.xml
- 项目关系配置:坐标,多项目,继承,依赖。
- 属性:在pom.xml中定义一些常量,然后在其他项目中引用。
- 构建配置:插件配置,生命周期绑定。
- 普通项目属性:作者信息,开源协议。
maven做项目管理的过程:
- pom.xml(描述项目构建)。
- 远端依赖仓库。
- 解析pom,依赖管理。
- 构建生命周期,不同的构建阶段。
- 插件:目标(源文件、中间产出物、资源文件、class文件、打包文件)。
Maven配置文件
- conf/settings.xml
- 配置maven的公共仓库
- 配置本地仓库位置
<localRepository>D:/developmentEnv/mavenRepository</localRepository>
- 配置阿里云maven镜像仓库
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
总结
- 默认的标准的目录结构
- pom继承,Super POM,多项目管理
- 依赖及依赖配置 dependencyManagement这个参数
- 仓库的概念
- 构建生命周期
- 插件及目标