本文假设你已经在本地电脑安装了maven。
参考资料:
http://www.sonatype.com/books/mvnref-book/reference/public-book.html
Maven的用途
maven是一个自动化构建工具。C语言中有make工具(configure, make, make install三部曲),Java语言中,最早有ant工具,之后发展出了maven,相似的构建工具有:ivy(和ant集成)、Gradle(基于Groovy)
这些构建工具会帮助你完成以下工作:编译、单元测试、打包、发布到包仓库、生成javadoc、生成报告(单元测试覆盖率、代码静态检查结果等)、部署到远程服务器。
Maven是一套标准,基于一个通用的软件对象模型(Project Object Model)提供一系列工具(插件Plug-in),方便描述和管理项目
Maven的基本概念
- POM
项目描述文件,Maven管理项目的依据(pom.xml)
- Lifecycle和phase
maven的核心模型。生命周期模型,定义了工程从编译到发布的各个过程。
- Goal
mvn的命令行参数的一种,告诉maven要用插件完成什么任务。
- dependency
用于定义maven工程所依赖的包(包的标识是用GAV来区分的),例如:
- profile
用于定义各种特定的配置,例如,我们的源代码通常会针对开发环境、测试环境、生产环境有不同的构建方式。
- Plug-in
maven通过插件来扩展它的功能。
- GAV
GroupId, ArtifactId 和Version 一个maven工程的唯一标识。
在命令行下输入:mvn --help,会看到maven命令的提示。其中:
表示了maven命令的基本格式。maven命令是由:选项、一个或多个Goal、一个或多个phase,组成。多个goals或phases之间用空格分隔。
Goal的表示方法是:插件名:goal
例如:mvn javadoc:javadoc 表示执行javadoc插件的javadoc目标。效果是生成javadoc。
当你在命令中输入某个phase后,maven将执行该phase所属的lifecycle内,之前的所有phase。例如:
了解以上概念后,你就完全可以参考已有的maven工程(开源项目中很多都用的maven),以及maven官方的资料来构建自己的应用了。
Maven实践
怎么创建一个maven工程?
使用maven可以基于已有的工程模板来创建maven工程(就如同我们使用eclipse时,新建工程也是基于Eclipse提供的一些工程模板)。
在Maven使用指南 中,说明了如何使用默认的工程模板来创建maven工程。基于maven的这一功能,为了提高开发人员搭建代码框架的效率,我们可以自制一些工程模板供开发人员使用。
使用上述方式构建出来的maven工程,
src/main/java为源代码目录
src/main/resources为源代码的类路径,用于放置配置文件
src/test/java为单元测试代码目录
src/test/resources为单元测试代码的类路径,用于放置单元测试时需要的配置文件,打包时,这个路径下的文件不会打入包中
怎么使用maven管理多个工程?
通常我们的代码会由多个模块组成,之前通过依赖关系整合在一起(关于多模块,可以看一下Spring或hibernate的源代码)。
对于这个问题,大家只需要了解maven工程中有个父子工程的概念(当然,不一定只能是两级,可以是多级,换句话说可以有孙子工程、重孙子工程 )
注意以下几点即可:
- 在父工程下执行的构建任务,子工程也会依次执行(所谓依次是指按modules中配置的顺序)
- 父工程的packaging类型必须是pom(相关知识可以看一下pom.xml的说明),即父工程的pom.xml中:
- 父工程中modules节点中的<module>节点描述它的子工程,在module节点内通过子工程的相对路径(相对父POM的路径)来定位子工程的位置。
- 父子工程是继承的关系,表现如下:
1) 父工程中,dependencies节点定义的依赖的包同时也被子工程依赖。
2) 父工程中,plugins节点定义的插件,同时也被子工程使用。
我们有时并不需要这样的继承关系,那么你可以:
1)通过dependencyManagement节点,来管理子工程所依赖的包的版本。
2)通过pluginManagement节点,来管理子工程所使用的插件的版本。
怎样使用maven插件
参考:如何使用Maven插件
怎样深入学习maven的使用?
最快的学习方法是看开源项目的pom.xml是怎么配置的。
只想了解某个插件的使用方法,或是某个功能的配置方法,最好查看:
官方的参考资料:http://maven.apache.org/
想系统的学习maven,或者系统的了解某方面的使用,最好查看:
maven手册:http://www.sonatype.com/books/mvnref-book/reference/public-book.html