1)即“accumulator of knowledge”,知识累加器
2)作用:a standard way to build the projects, a clear definition of what the project consisted of, an easy way to publish project information and a way to share JARs across several projects.按照标准构建项目、发布项目并支持跨项目共享jar包
3)目的:使开发人员最短时间理解项目
*making the build process easy使构建更加容易
屏蔽大量细节信息,但仍然未删除必要的信息
*providing a uniform build system提供一个统一的构建系统
project object model (POM) and a set of plugins that are shared by all projects
即使用项目对象模型(POM)和项目共享的插件集
*providing quality project information提供优质项目信息
POM和源码信息及使用插件
*Providing guidelines for best practices development 提供最佳开发实践的指导
协助项目工作流程、生命周期、测试发布管理和问题跟踪,布局项目目录
*allowing transparent migration to new features 允许透明的迁移到新特性
安装新的或者更新插件已经依赖管理的工作由maven负责
配置plug-ins
1)构建插件(Build plugins)+报告插件(Reporting plugins):
2)插件最少需要包含信息:groupId, artifactId and version
Pom的dtd链接http://maven.apache.org/ref/3.0.3/maven-model/maven.html
3)
4)配置
5)配置
安装maven
1)下载maven,主要版本3.0.3/2.2.1/2.0.11
2)环境要求:jdk1.5以上+Memory+Disk(>100M)+OS(Windows xp/7或者Mac OS)
3)将下载包unzip,放置到指定的目录m2_path下
4)将M2_HOME添加到环境变量中,设置为上一步指定的目录
5)设置M2=%M2_HOME%\\bin,设置MAVEN_OPTS=-Xms 256m –Xmx 512m(可选)
6)环境变量Path中添加%M2%
7)设置JAVA_HOME并将%JAVA_HOME%\\bin添加到Path中
8)输入命令mvn –version检查是否安装成功
M2E-eclipse的maven插件
特性:
1)从SCM签出项目
2)利用预定义Archetype创建项目
3)创建Maven模块
4)导入Maven项目
5)m2eclipse有POM编辑器,可以不用手工编辑POM
6)m2eclipse内置了对Maven仓库的搜索功能
7)依赖树功能,能够很方便的查看,jar包之间的依赖关系
安装:
在Eclipse中,从Help菜单选择 Software Updates。在Software Updates and Add-ons 对话框中,点击 Available Software 按钮,然后点击 Add Site 添加更新站点URL:http://download.eclipse.org/technology/m2e/releases 。在你添加了该URL之后,你将能够为你的项目添加 Maven Integration, Maven Optional Components,和Maven Project Configurators。
maven生命周期
Maven有三套相互的生命周期,请注意这里说的是“三套”,而且“相互”,这三套生命周期分别是:
∙Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
∙Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。
∙Site Lifecycle 生成项目报告,站点,发布站点。
再次强调一下它们是相互的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。
clean生命周期
每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行mvn clean ,这个的clean是Clean生命周期的一个阶段。有Clean生命周期,也有clean阶段。Clean生命周期一共包含了三个阶段:
∙pre-clean 执行一些需要在clean之前完成的工作
∙clean 移除所有上一次构建生成的文件
∙post-clean 执行一些需要在clean之后立刻完成的工作
mvn clean 中的clean就是上面的clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,mvn clean 等同于 mvn pre-clean clean ,如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。这是Maven很重要的一个规则,可以大大简化命令行的输入。
Site生命周期
∙pre-site 执行一些需要在生成站点文档之前完成的工作
∙site 生成项目的站点文档
∙post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
∙site-deploy 将生成的站点文档部署到特定的服务器上
这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成,很好看。
Default生命周期
Default生命周期是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:
∙validate
∙generate-sources
∙process-sources
∙generate-resources
∙process-resources 复制并处理资源文件,至目标目录,准备打包。
∙compile 编译项目的源代码。
∙process-classes
∙generate-test-sources
∙process-test-sources
∙generate-test-resources
∙process-test-resources 复制并处理资源文件,至目标测试目录。
∙test-compile 编译测试源代码。
∙process-test-classes
∙test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
∙prepare-package
∙package 接受编译好的代码,打包成可发布的格式,如 JAR 。
∙pre-integration-test
∙integration-test
∙post-integration-test
∙verify
∙install 将包安装至本地仓库,以让其它项目依赖。
∙deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。
POM
1)Maven中包含工程和配置信息的XML文件、
2)Build directory:target,Resource directory:src/main/java,Test directory:src/main/test
3)Maven1中的project.xml对应于Maven2中的pom.xml
4)配置项目的依赖和可执行的插件、目标及构建剖面信息
5)Super POM是Maven默认POM。所有POM都继承自该POM,除非显示设置
6)Mininum POM:
7)正确的构件名称(artifact name)格式如下
8)每个工程都有一个包装类型,如果不指定则使用jar值 9)Pom文件由以下元素组成: *Dependencies *Developers and contributors *Plugin lists(including reports) *Plugin executions and matching ids *Plugin configuration *Resources 10)不同目录层次指定父Pom采用 |-- my-module |`-- pom.xml(my module的pom) `-- pom.xml(my app的pom) 说明:my-module继承自my-app 简化成如下格式 11)同层次目录指定父Pom采用 |-- my-module | `-- pom.xml `-- parent `-- pom.xml 12)项目聚合 与项目继承类似,但是项目继承是module的pom中指定parent,而项目聚合是从parent的pom中指定modules。项目聚合需要实现以下两点: *设置parent的 *再parent的pom中指定其modules(children POMs) 不同目录层次: |-- my-module | `-- pom.xml `-- pom.xml 同层次目录: |-- my-module | `-- pom.xml `-- parent `-- pom.xml 13)项目变量: Build profiles 1)四种类型配置文件: *工程文件——pom.xml *用户文件——(%USER_HOME%/.m2/settings.xml) *全局文件——(%M2_HOME%/conf/settings.xml) *配置描述文件——profile.xml(Maven3已不需要) 配置文件触发或激活条件: *明确指定 *通过Maven设置 *基于环境设置 *OS设置 *目前或丢失的文件 2)激活配置方式: *命令行:mvn groupId:artifactId:goal –p profile-1,!profile-2 * * ● ● ● * Repositories(Maven仓库) 1)Maven仓库用来存放配置插件和不同类型依赖关系 2)Local本地资源库:本地存放的远程下载缓存或临时创建的还未发布的构件 3)Remote远程仓库: 任何其他类型资源库,通过各种协议访问(file://或http://等),可以是第三方发布的真正的远程资源库,也可以是公司内部发布的开发团队的私有资源库。 4)Maven不建议将jars存放在cvs中: *仓库往往可以共享jars,节省存储空间 *检查项目更快:只需下载一次,无需重复更新大型二进制文件 *没有版本需要:减少cvs的版本管理任务,无需版本控制 5) the Standard Directory Layout 1)依赖管理是Maven最重要和用户最熟知的领域之一。使用单一工程时对依赖机制的使用不是那么必要,但是当项目由多个负责的工程相互构成的时候,使用依赖管理能让你更好的控制项目及保持工程稳定。 2)Transitive dependencies传递依赖:Maven2.0中只支持”最接近的定义”,只使用最接近的依赖于你的项目的依赖关系树的版本。 3)Excluded dependencies 排除依赖:x->y,y->z时x可以明确排除对z的依赖 4)Optional dependencies可选依赖:y->z,y可以明确指出对z的可选依赖,当x->y时不会传递可选依赖,如果x需要依赖z就要在x的选项中添加对z的依赖。 5)Dependency scope依赖范围:依赖传递的同时影响各种构建路径。主要范围有compile(默认的)、provided、runtime、system、import等。 6)Dependency Management在共同pom配置所有的依赖信息,在子pom中简单引用即可。(http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html参考)在依赖关系中我们必须指定type,因为依赖引用最小集合是
Dependency Mechanism(依赖机制)src/main/java Application/Library sources src/main/resources Application/Library resources src/main/filters Resource filter files src/main/assembly Assembly descriptors src/main/config Configuration files src/main/webapp Web application sources src/test/java Test sources src/test/resources Test resources src/test/filters Test resource filter files src/site Site LICENSE.txt Project's license NOTICE.txt Notices and attributions required by libraries that the project depends on README.txt Project's readme