Apache Maven 是一个软件项目管理和理解工具.它基于POM(project object model,项目对象模型),它能够从一个中央信息来管理项目的构建,报告和文档.html
Introduction:web
Maven,在犹太语中的意思是知识仓库,最初开始是为了简化Jakarta Turbine项目的构建过程.有一些被CVS管理的并拥有各自有些微差别的Ant构建文件和JAR的项目.咱们想要有个标准的项目构建方法,清晰的项目组成定义,简单的项目信息发布方式以及共享JAR包的途径.apache
结果是一个咱们能够用来构建和管理JAVA项目的工具.咱们但愿它可使JAVA开发人员的平常工做更加简单,而且为任何JAVA项目的理解提供广泛性的帮助.闭包
Maven的主要目标是容许开发人员在最短的时间内理解开发工做的完整状态.为了达到这一目标,这里有一些使人担忧的问题须要处理:框架
1.简化构建过程maven
2.提供一个统一的构建系统编辑器
3.提供优质的项目信息ide
4.提供最优部署实践的指导方案工具
5.容许透明的迁移到新特性post
你可能据说过关于Maven的下面一些内容:
1.它是站点和文档工具
2.它扩展Ant并让你下载依赖
3.它是可复用Ant脚本的集合
尽管Maven作这些事,可是这些并非Maven仅有的特性,并且这些和Maven的主旨有很大的不一样.
咱们应当了解到有些项目可能由于其历史缘由没办法符合要求.尽管Maven自己的设计足够灵活,可是在这些状况下针对不一样项目的不一样须要,它仍然无法迎合除非可以作些折中的处理.
若是你决定使用Maven,而且有着不能重组的不一样寻常的构建结构,你可能不得不放弃它的一些功能或者彻底放弃使用Maven
Feature:
1.经过最佳的实践来简单的安装项目-用几秒钟的时间建立一个项目
2.在全部项目中使用一致的方式,意味着不须要加大开发人员进入项目的时间
3.出众的依赖管理包括自动更新,依赖闭包(也叫做依赖传递)
4.能够轻易地同时处理多个项目
5.一个庞大且不断成长的仓库,储存了大量开源项目实时可用的最新版本的框架库.
6.可扩展的,能够轻松编写JAVA或脚本语言的插件
7.只须要少许配置就能够即时访问新特性
8.在Maven外部为依赖管理和部署提供Ant任务
9.基于模型的构建:在大多数状况下,Maven有能力构建任意多的项目到预约义的输出类型如:JAR,WAR,或基于项目元数据的分布,而不须要任何脚本
10.项目信息的相关站点:在构建过程当中使用相同的元数据,Maven能够生成一个包含任何你添加的文档信息的Web站点或者PDF,并将项目的开发状态添加到标准报告中
11.发布管理和分发出版:不须要太多额外的配置,Maven将集成你的代码控制系统(如:CVS)而且基于一个标签来管理项目的发布.它也能够发布项目到分布位置以供其余项目使用.Maven有能力发布一个独立的输出如:一个JAR,一个包含其余依赖和文档的存档或者做为一个分布源
12.依赖管理:Maven鼓励中央库的JAR和其余的依赖.Maven伴随着一个机制:项目客户端能够经过从一个中央库下载所需的JAR来构建你的项目.这容许了Maven用户来重用项目之间的JAR而且鼓励了项目之间的沟通来确保向下兼容问题处理
给出原文:
1.Simple project setup that follows best practices - get a new project or module started in seconds
2.Consistent usage across all projects means no ramp up time for new developers coming onto a project
3.Superior dependency management including automatic updating, dependency closures (also known as transitive dependencies)
4.Able to easily work with multiple projects at the same time
5.A large and growing repository of libraries and metadata to use out of the box, and arrangements in place with the largest Open Source projects for real-time availability of their latest releases
6.Extensible, with the ability to easily write plugins in Java or scripting languages
7.Instant access to new features with little or no extra configuration
8.Ant tasks for dependency management and deployment outside of Maven
9.Model based builds: Maven is able to build any number of projects into predefined output types such as a JAR, WAR, or distribution based on metadata about the project, without the need to do any scripting in most cases.
10.Coherent site of project information: Using the same metadata as for the build process, Maven is able to generate a web site or PDF including any documentation you care to add, and adds to that standard reports about the state of development of the project. Examples of this information can be seen at the bottom of the left-hand navigation of this site under the "Project Information" and "Project Reports" submenus.
11.Release management and distribution publication: Without much additional configuration, Maven will integrate with your source control system such as CVS and manage the release of a project based on a certain tag. It can also publish this to a distribution location for use by other projects. Maven is able to publish individual outputs such as a JAR, an archive including other dependencies and documentation, or as a source distribution.
12.Dependency management: Maven encourages the use of a central repository of JARs and other dependencies. Maven comes with a mechanism that your project's clients can use to download any JARs required for building your project from a central JAR repository much like Perl's CPAN. This allows users of Maven to reuse JARs across projects and encourages communication between projects to ensure that backward compatibility issues are dealt with.
FAQ:http://maven.apache.org/general.html
Download:https://maven.apache.org/download.cgi
Install:
1.确保已经搭建了可运行的JAVA环境
2.解压下载包
3.配置Maven环境变量(PATH添加MAVEN_HOME\bin)
4.运行命令mvn -v来检测安装是否成功
Configure:
Maven自身使用和构建项目使用的配置分布在如下几个地方
1.MAVEN_OPTS 环境变量:这个变量包含了用来启动JVM运行Maven的参数和能够额外添加给Maven的全局选项.
2.setting.xml 文件:位于USER_HOME/.m2目录下的这个配置文件用来包含供Maven在全部项目中使用的通用配置.
3..mvn 文件夹:位于项目的顶层文件夹,maven.config和extensions.xml包含了项目指定的用来运行Maven的配置.
Run:
Maven的运行语法:mvn [options] [<goal(s)>] [<phase(s)>]
使用mvn -h来获取全部可用的选项
使用Maven生命周期阶段来构建项目的一个典型调用:mvn package
生命周期的构建以及各个阶段:
1.clean:pre-clean, clean, post-clean
2.default:validate, initialize, 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, pre-integration-test,integration-test, post-integration-test, verify, install, deploy
3.site:pre-site, site, post-site, site-deploy
从新构建一个项目生成全部打包输出和文档站点并部署到仓库管理器能够经过下面的命令执行:
mvn clean deploy site-deploy
仅仅建立包并安装到本地仓库以供其余项目能够来复用,执行以下命令:
mvn clean install(这也是maven项目中最经常使用的构建方式)
当并非和一个项目一块儿工做,在其余的一些用例中,你可能只是想要调用一个指定的任务(所谓的目标插件),以下执行:
mvn archetype:generate || mvn checkstyle:check
IDE Integration:
全部的JAVA平台的流行开发环境都支持对Maven众多开箱即用的特性,下面按字母排序给出一些流行IDE:
1.Eclipse IDE - M2Eclipse(它是官方正式的Eclipse项目,用来将Maven整合进Eclipse)
特性以下:
在Eclipse中启动Maven构建
基于pom.xml的依赖关系管理
从Eclipse工做空间解决Maven依赖而不须要安装到本地Maven仓库
自动从远程Maven仓库下载依赖
为新建Maven项目,pom.xml提供向导,而且为现有的项目提供可Maven化支持
在远程Maven仓库快速搜索依赖
在Java编辑器中经过使用类名或包名查找依赖Jar来快速修复
和其余Eclipse工具整合,如:WTP,AJDT,Mylyn,Subclipse等
2.JetBrains IntelliJ IDEA(略)
3.Netbeans IDE(略)