标题：Maven
简介
Maven是基于项目对象模型(POM)，可以通过一小段描述信息来管理项目的构建，报告和文档的软件项目管理工具。
目前，绝大多数开发人员都把 Ant 当作 Java 编程项目的标准构建工具。遗憾的是，Ant 的项目管理工具（作为 make的替代工具）不能满足绝大多数开发人员的需要。通过检查 Ant 构建文件，很难发现项目的相关性信息和其它元信息（如开发人员/拥有者、版本或站点主页）。
Maven 除了以程序构建能力为特色之外，还提供 Ant 所缺少的高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性，所以常常用两三行 Maven 构建脚本就可以构建简单的项目，而使用 Ant 则需要十几行。事实上，由于 Maven 的面向项目的方法，许多 Apache Jakarta 项目现在使用 Maven，而且公司项目采用 Maven 的比例在持续增长。
Maven这个单词来自于意第绪语，意为知识的积累，最早在Jakata Turbine项目中它开始被用来试图简化构建过程。当时有很多项目，它们的Ant build文件仅有细微的差别，而JAR文件都由CVS来维护。于是Maven创始者开始了Maven这个项目，该项目的清晰定义包括，一种很方便的发布项目信息的方式，以及一种在多个项目中共享JAR的方式。 [1]
特点
那么，Maven 和 Ant 有什么不同呢？在回答这个问题以前，我要强调一点：Maven 和 Ant 针对构建问题的两个不同方面。Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面，它从 Ant 借用了绝大多数构建任务。因此，由于 Maven 和 Ant 代表两个差异很大的工具，所以我将只说明这两个工具的等同组件之间的区别，如表 1 所示。[1]
​Maven
Ant
标准构建文件
project.xml 和 maven.xml
build.xml
特性处理顺序
${maven.home}/bin/driver.properties
${project.home}/project.properties
${project.home}/build.properties
${user.home}/build.properties
通过 -D 命令行选项定义的系统特性
最后一个定义起决定作用。 
通过 -D 命令行选项定义的系统特性
由 <property> 任务装入的特性 
第一个定义最先被处理。 
构建规则
构建规则更为动态（类似于编程语言）；它们是基于 Jelly 的可执行 XML。
构建规则或多或少是静态的，除非使用 <script> 任务。（请参阅 参考资料以获得相关教程。） 
扩展语言
插件是用 Jelly（XML）编写的。
插件是用 Java 语言编写的。
构建规则可扩展性
通过定义 <preGoal> 和 <postGoal> 使构建 goal 可扩展。 
构建规则不易扩展；可通过使用 <script> 任务模拟 <preGoal> 和 <postGoal> 所起的作用。 
Maven是一个项目管理工具，它包含了一个项目对象模型 (Project Object Model)，一组标准集合，一个项目生命周期(Project Lifecycle)，一个依赖管理系统(Dependency Management System)，和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当你使用Maven的时候，你用一个明确定义的项目对象模型来描述你的项目，然后Maven可以应用横切的逻辑，这些逻辑来自一组共享的（或者自定义的）插件。
Maven 有一个生命周期，当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤，直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是，Maven 运行了许多默认的插件目标，这些目标完成了像编译和创建一个 JAR 文件这样的工作。 
此外，Maven能够很方便的帮你管理项目报告，生成站点，管理JAR文件，等等。
常用命令
mvn archetype：create 创建Maven项目
mvn compile 编译源代码
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 生成eclipse项目文件
mvn jetty:run 启动jetty服务
mvn tomcat:run 启动tomcat服务
推荐书籍
目前中文版对maven介绍比较全的书籍是《Maven实战》
Win7配置
现在Java新架构的不断出现，例如Struts，Spring，Hibernate等，项目的配置文件的增多，给开发人员带来很大麻烦。在实际的开发当中，Myeclipse中的project越来越庞大，所依赖的第三方Jar包越来越多，这显得Project很臃肿，给项目管理带来了很大不便，尤其是在一些大型项目。为了解决上述问题，Apache开源组织发布了Maven[2]，它适用于大的Java项目。
系统及环境：Win7 ，Jdk1.6 ，Myeclipse7.5。
首先要安装Jdk1.6 和 Myeclipse7.5 。
1. Maven有一个重要的文件"settings.xml“，这个文件来源于apache-maven-2.0.8/conf/ 下，要放在windows下， Win7和Winxp还是有点不一样 ， Win7 ---C:\Users\用户名\.m2 ， Winxp ---C:\Documents and Settings\用户名\.m2 。
2. 设置Maven的环境变量，基本上和设置Jdk环境变量相似，首先设置MAVEN_HOME，再加入Path 。 
3. 修改”settings.xml” 文件，在这个文件中找到<localRepository>d:/work</localRepository>这一行，进行修改。这一行代表了Maven的Jar包仓库的位置。work下放的都是项目所用到的jar包，每个Project都可以共用一个work。
4. Myeclipse7.5及以上版本本身自带Maven插件。如果使用低版本的Myeclipse需要安装插件，在help菜单中选择software updates，选择find and install，选择search for new features to install－选择new remote site。写入 name：maven URL：http:// m2eclipse.codehaus . org/update/去下载相关jar包和插件。
5. 在Myeclipse中windows-perferences中，在下图的位置上，查看users settings的路径是否正确。
6. 建立Maven的project，File--new—other—Java Maven Project
7. 然后打开project里pom.xml文件，
<project xmlns="http:// maven.apache. org/POM/4.0.0"xmlns:xsi="http://www .w3. org/2001/XMLSchema-instance"
xsi:schemaLocation="http: //maven .apache .o rg/POM/4.0.0http: //m aven.apache . org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>maventest</groupId>
<artifactId>maventest</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>Maven Quick Start Archetype</name>
<url>http:// maven.apac he. org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
在这xml文件中添加Maven所依赖的Jar的名称，也就是添加<dependency></dependency>节点。
例如：添加大家常用的Struts Jar包
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.0.11</version>
</dependency>
8. 到现在为止，环境就算搞定了。接下来要应用Maven来打包Project为大家服务的。
在cmd中的命令：
a. mvn eclipse:clean 清除Project中以前的编译的东西，重新再来
b. mvn eclipse:eclipse 开始编译Maven的Project
在Myeclipse中的操作：
a. 选中Maven Project 右击 在Run As中选择Maven clean
b. 在Myeclipse中，Project—Clean 开始编译
c. 选中Maven Project 右击 在Run As中选择Maven install
执行完这几步，如果没发生异常，会在project里生成一个target文件夹，这个文件夹里的东西，就是Maven打包发布的东西。
生命周期
Maven的生命周期是为了对所有的构建过程进行了抽象了，便于统一。clean(清理)此生命周期旨在给工程做清理工作，它主要包含以下阶段：
pre-clean - 执行项目清理前所需要的工作。 
clean - 清理上一次build项目生成的文件。 
post-clean - 执行完成项目清理所需的工作. default(默认)validate - 验证项目是否正确且所有必要的信息都可用。 
initialize - 初始化构建工作，如：设置参数，创建目录等。
generate-sources - 为包含在编译范围内的代码生成源代码. 
process-sources - 处理源代码, 如过滤值. 
generate-resources - 
process-resources - 复制并处理资源文件，至目标目录，准备打包。
compile - 编译项目中的源代码. 
process-classes - 为编译生成的文件做后期工作, 例如做Java类的字节码增强. 
generate-test-sources - 为编译内容生成测试源代码. 
process-test-sources - 处理测试源代码。
generate-test-resources - 
process-test-resources - 复制并处理资源文件，至目标测试目录。
test-compile - 将需测试源代码编译到路径。一般来说，是编译/src/test/java目录下的java文件至目标输出的测试classpath目录中。
process-test-classes - 
test - 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
prepare-package - 
package - 接受编译好的代码，打包成可发布的格式，如 JAR 。
pre-integration-test - 
integration-test - 按需求将发布包部署到运行环境。 
post-integration-test -
verify - 
install -将包安装到本地仓库，给其他本地引用提供依赖。
deploy -完成集成和发布工作，将最终包复制到远程仓库以便分享给其他开发人员。site(站点)pre-site - 执行一些生成项目站点前的准备工作。
site - 生成项目站点的文档。
post-site - 执行需完成站点生成的工作，如站点部署的准备工作。 
site-deploy - 向制定的web服务器部署站点生成文件。[3]
Maven生命周期参考：Apache Maven Project[3]，书籍《Maven In Action》