Apache Maven 是一个软件项目管理和理解工具.它基于POM(project object model,项目对象模型),它可以从一个中央信息来管理项目的构建,报告和文档.
Introduction:
Maven,在犹太语中的意思是知识仓库,最初开始是为了简化Jakarta Turbine项目的构建过程.有一些被CVS管理的并拥有各自有些微差异的Ant构建文件和JAR的项目.我们想要有个标准的项目构建方法,清晰的项目组成定义,简单的项目信息发布方式以及共享JAR包的途径.
结果是一个我们可以用来构建和管理JAVA项目的工具.我们希望它可以使JAVA开发人员的日常工作更加简单,并且为任何JAVA项目的理解提供普遍性的帮助.
Maven的主要目标是允许开发人员在最短的时间内理解开发工作的完整状态.为了达到这一目标,这里有一些令人担心的问题需要处理:
1.简化构建过程
2.提供一个统一的构建系统
3.提供优质的项目信息
4.提供最优部署实践的指导方案
5.允许透明的迁移到新特性
你可能听说过关于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(略)