假如你已经有十次输入同样的Ant targets来编译你的代码、jar或者war、生成javadocs,你一定会自问,是否有有一个重复性更少却能同样完成该工作的方法。Maven便提供了这样一种选择,将你的注重力从作业层转移到项目治理层。Maven项目已经能够知道如何构建和捆绑代码,运行测试,生成文档并宿主项目网页。
O'Reilly's的新书Maven:A Developer's Notebook帮你提升你的项目、使其尽快的运行起来,同时也提供了对Maven插件及其团队协作等高级特性的深度考察。在“Maven Jump-Start” (656K PDF)的示范章节中,作者Vincent Massol和Timothy M.O'Brien向你展示了如何安装Maven,如何开始你初次的构建,研究如何使其与IDEs集成极其资源管等特性。
Vincent Massol是Jakarta Catus framework(框架)的创建者。其后他花费4年的时间在几个大项目(主要是J2EE)的架构技术上。他现在是Pivolis的创办人和CTO,这是一家专注于应用灵敏方法进行软件开发的公司。他现在居住在法国的首都City of Light(巴黎)。
Timothy M. O'Brien作为一个专业的歌手/程序员现正在芝加哥地区工作和生活。
让我们开始使用Maven。在本章结束时,你应该能够从头建立一个Maven的项目,使用Maven进行相关治理,创建基于某些感爱好报告的简单的web站点。
安装Maven
开始本书以前,你有一些必备的安装工作。本书中的例子用Java1.4.2编写,Maven能够兼容Java1.4.2和Java1.5.0。本书中所写Maven的最新版本是在编写本书时发布的—Maven 1.0.2。除JDK和Maven1.0.2之外,你还需要连接到Internet,Maven将通过公网站点下载相关其需要的。那么,前进,安装Maven吧。
我该如何做?
从Apache Software Foundation(ASF)下载Maven。进入http://maven.apache.org/从左侧的导航菜单中的Getting Maven菜单选择下载。它将带你进入一个让你选择Windows 安装包、zip文件、tar'd.bzip文件或者tar'd.gzip文件。下载适合你平台的分类。
我该如何做?
从Apache Software Foundation(ASF)下载Maven。进入http://maven.apache.org/从左侧的导航菜单中的Getting Maven菜单选择下载。它将带你进入一个让你选择Windows 安装包、zip文件、tar'd.bzip文件或者tar'd.gzip文件。下载适合你平台的分类。
提示
某些Developer's Notebook中涉及的插件未与Maven1.0.2绑定。请参考第6章并且附录A有安装Maven所需插件的全部列表以及具体说明。
在Microsoft Windows平台,下载Windows安装包(maven-1.0.2.exe),跟随自动安装过程中的提示。在使用Maven Windows 安装器进行安装后,你应该定义一个用户环境变量,MAVEN_HOME,指向你本地的Maven安装。你此时需要进入控制面版→系统→高级选择环境变量按钮,添加%MAVEN_HOME%\bin到你的PATH环境变量。进入命令提示行运行cmd.exe,假如Maven安装成功,你将能够看到命令行有下面的输出:
C:\dev\mavenbook\codemaven -v
__ __
\/ __ _Apache__ ___
\/ / _` \ V / -_) ' \ ~ intelligent PRojects ~
_ _\__,_\_/\_____ v. 1.0.2
假如你愿意安装Maven到一个除了C:\Program Files\Apache Software Foundation\Maven 1.0.2的目录,你也可以下载Maven1.0.2.zip文件,解压缩到任何目录。设置MAVEN_HOME指 向到Maven解压缩的目录,并且添加%MAVEN_HOME%\Bin到你的PATH环境变量。
在Unix平台,下载tar'd.zip文件(Maven-1.0.2.tar.gz)并接压缩tar xvzf maven-1.0.2.tar.gz到你选择的目录。本试验假设你解压Maven到/usr/local/maven-1.0.2目录下。你此时需要设置两个环境变量,MAVEN_HOME和PATH。下面的命令为这两个变量设置适当的值:
[tobrien@mavenbook tobrien]$ eXPort MAVEN_HOME=/usr/local/maven-1.0.2
[tobrien@mavenbook tobrien]$ export PATH=${PATH}:${MAVEN_HOME}/bin
假如Maven被成功安装到你的机器,你能够看到与Windows系统同样的输出。恭喜!你已经成安装了Maven。
提示
有些人喜欢保存本地应用程序在Unix下的/opt目录或
Windows下的c:\apps。你可以根据个人喜好安装Maven。
刚刚发生了什么?
你刚刚安装了Maven1.0.2并且配置了一些环境变量。是的!一旦你对MAVEN_HOME进行了有效的设置或是maven.bat或maven.sh已经存在,你已经能够完成Developer's Notebook本次的实验。
关于......Maven 2?
是时机提及Maven 2(有时也被称为“m2”)。Maven 2完成了对Maven 1的重写。重写的首要目的是要提供了强大的Jave构建和包含API的项目,答应Maven被植入任何地方,尤其是高级别的产品如IDEs、质量工具、报告工具等这些。Maven 2构建生命周期的概念正式话,其比Maven更易扩展。
Maven 1和Maven 2有许多共同点,但它们还有几个主要的不同之处。在书中的各个部分我们尽可能提示你所希望了解的那些不同之处。更多关于Maven 2的信息,请转到http://maven.apache.org/下载Maven 2的体验版本,并加入Maven用户或开发者邮件列表。假如你听过Continuous Integration,你可能也想看一看命名为Continuum的Maven子项目,地址在http://maven.apache.org/continuum。
开始一个新的项目
创建新项目的争论一部分在于有很大部分的工作努力被用到在“发展基础设施”上—自动构建、单元测试、文档、项目报告等。使用Maven你可以加速这个过程,生成项目的框架使其作为新应用的种子。
我该如何做?
Maven拥有一个应用程序生成插件(Genapp)你能通过其创建一个新项目。首先创建一个空的目录c:\dev\mavenbook\code\genapp\test-application这将成为应用程序生成后的处所。通过执行genapp这个目标来运行Genapp插件,选择默认的模版并且提供一些你的新项目的相关信息。
C:\dev\mavenbook\code\genapp\test-applicationmaven genapp
__ __
\/ __ _Apache__ ___
\/ / _` \ V / -_) ' \ ~ intelligent projects ~
_ _\__,_\_/\_____ v. 1.0.2
Attempting to download commons-jelly-tags-interaction-20030211.143817.jar.4K downloadedEnter a project template to use: [default][Enter]Please specify an id for your application:
[app]test-applicationPlease specify a name for your application: [Example Application]Test ApplicationPlease specify the package for your application: [example.app]mdn.testappbuild:start:genapp:
[copy] Copying 1 file to C:\dev\mavenbook\code\genapp\test-application\src\java\mdn\testapp[copy] Copying 3 files to C:\dev\mavenbook\code\genapp\test-application\src\test\mdn\testapp[copy] Copying 1 file to C:\dev\mavenbook\code\genapp\test-application\[copy] Copying 2 files to C:\dev\mavenbook\code\genapp\test-application\BUILD SUCCESSFUL
本插件会要求用户一些输入,从这个输出内容你可以看到你使用了默认的(defalut)应用程序模板,并且你提供了新项目的应用程序ID、name,和包名。默认的(default)应用程序模板创建了一个单独的类,mdn.testapp.app,和一个静态main函数和两个JUnit测试。
Maven的应用程序生成插件生成了下面的目录和文件:
test-application/project.propertiesproject.xmlsrc/conf/app.propertiesjava/mdn/testapp/App.javatest/mdn/testapp/AbstractTestCase.javaAppTest.javaNaughtyTest.java
所有Maven项目有一个参考了项目对象模型(POM)的标准目录结构, (as described shortly)。假如你有一些现存的类你想添加到一个项目,添加它们到src/java,假如你有一些单元测试将它们添加到src/test。假如这些已有的类和单元测试依靠一些外部的苦,你将在随后的章节看到如何添加一个附属。xdos目录包含了格式为XDoc的项目文档。
提示
请注重Maven1.0.2装载的Genapp插件版本创建了非标准的布局。在Maven项目中src/java和src/test不再出现在固有的源代码和单元测试位置。取而代之的是你可以使用src/main/java和src/test/java.为了改变这些,修改你项目的xml文件,改变src/java的引用为src/main-/java,src/test的引用为src/test/java.更多的信息,请参见“Maven Conventions”,地址在http://maven.apache.org/-reference/conventions.Html.
project.xml是项目的描述符;它是一个内容为POM的XML文件。让我们看看这个project.xml的拷贝,其已经定义了这个项目:
<project
<pomVersion
3</pomVersion
<artifactIdtest-application
</artifactId<nameTest Application
</name<currentVersion1.0
</currentVersion<organization
<name
Your Organization
</name
<urlhttp://www.someorganization.biz/</url
<logohttp://www.someorganization.biz/logo.gifjpg...</logo
</organization<inceptionYear2005</inceptionYear
<packagemdn.testapp
</package
<logohttp://yourproject/logo.jpggif...
</logo<descriptionAn example projec