您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > Maven 参考文档
Maven参考文档Maven1.0已经历了几年的时间,并且作为Ant的替代品已被广大的开发人员所接收,但它并没有在很大程度使开发人员从Ant的build.xml文件中解脱出来。Maven1.0速度慢并且笨拙,使用起来的困难度并不亚于使用Ant的项目。事实上,它的核心是基于Ant实现的。在经过了几乎彻底的重写后,Maven2.0诞生了。一个Java项目中最困难的地方就是如何着手启动它。在启动项目之前,我们必须配置好所有的逻辑关系。比如,Java源代码应该放在何处?单元测试应该在何处进行?依赖的jar包应该如何放置?如何构建项目,如何形成文档,如何测试和部署项目?在这种情况下,开发人员不同的处理选择将会影响项目的余下部分。您的选择可能会使你陷入困境,也可能会在将来证明您是一位Java架构大师。我们假定后者是我们奋斗的目标,接下来就进入我们的正题。构建一个Java项目可以使用很多工具,其中包括Ant。Ant作为一款具有革命性的工具,一直是众多开发者使用工具中的首选,它能使开发人员摆脱使用大量make命令的苦海。对于那些不太熟悉make命令的人来说,他们有充足的理由来表明使用命令并不是构建Java项目的最好工具,因为它不具备平台独立性并且不易使用。Ant的出现解决了以上的问题,它使用了一个平台独立的工具,该工具能够解析XML配置文件,即build.xml。虽然Ant由于其诸多的优点而备受欢迎,但它同样有一些缺点。build.xml文件由于采用了极其简短的描述方式,使得开发人员需要预先学习它的语法。虽然学习曲线不是很陡峭,但Java开发人员更应该把时间放在开发上面。Maven是新一代的生力军,它的境遇正好和几年前的Ant十分类似。Maven1.0已经历了几年的时间,并且作为Ant的替代品已被广大的开发人员所接收,但它并没有在很大程度使开发人员从Ant的build.xml文件中解脱出来。Maven1.0速度慢并且笨拙,使用起来的困难度并不亚于使用Ant的项目。事实上,它的核心是基于Ant实现的。在经过了几乎彻底的重写后,Maven2.0诞生了。Maven2.0的优点Maven2.0有许多很好功能,这些功能不仅仅是帮助您构建项目。如果您刚刚开始启动一个Java项目,并且想使该项目快速地开展下去,Maven2.0能够在几分钟内达到您的要求。以下是Maven2.0的一些优点:–标准的项目布局和项目结构生成器–标准的依赖管理机制–多项目支持–在开发者需要的时候及时地下载新的插件和功能部件–生成最新项目信息的网站–集成了源代码控制软件:CVS和Subversion以上列表展示的只是Maven2.0特点中的一小部分。但这足以使Maven2.0成为一个构建管理系统可靠的选择。既然我们已经知道Maven是个什么东西了,接下来让我们看看如何使用它。入门我们要做的第一件事情就是设置目录结构,但这并不需要让我们手动设置,Maven会根据您开发的项目类型来为您做这件事。一旦您下载并解压了最新发布的Maven2.0,您应该将Maven所在目录下面的bin目录添加到您的系统路径下。您可以运行命令mvn-version来测试您的安装。既然已经安装上了工具,让我们看看创建一个简单的Java项目的例子。Maven使用原型来决定目录结构是如何展现的。Maven自带了几个内建的原型,您也可以自定义原型。mvnarchetype:create-DgroupId=com.oreilly-DartifactId=my-app您看,这就生成了我们的项目布局。my-app—-src—-main—-java—-com—-oreilly—-test—-java—-com—-oreilly对,就这么简单。这种目录结构可以通过创建一个新的原型来覆写,但并不推荐这么做,因为Maven的一个优点就是使用标准的目录结构。该目录结构包含两个源代码树,一个是Java应用程序的源代码,另一个是单元测试代码。同时您也许会注意到,当第一次运行Maven的时候,它会进行一些下载工作。当您开始调用工具时,Maven会根据您使用的插件来更新自身的一些所需功能。Maven默认会从Ibiblio存储库中得到更新。您可以在Maven安装目录下的conf目录中,或者项目自身中修改Maven远程存储库的选择。您会发现Maven在my-app目录下创建了一个pom.xml文件。这是项目的最基本部分。pom.xml文件包含了一组指令,这些指令告诉Maven如何构建项目和包含哪些其它的特殊指令(POM是“项目对象模型”的缩写)。在默认的情况下,Maven包含了JUnit的依赖以此来鼓励单元测试。xsi:schemaLocation=”://maven.apache.org/maven-v4_0_0.xsd”4.0.0com.oreillymy-appjar1.0-SNAPSHOTMavenQuickStartArchetype创建完项目后,我们可以往项目里添加代码并使用Maven的所有全新技巧。注意以下命令必须在pom.xml文件所在的目录中运行。–mvntest:运行应用程序中的单元测试–mvnpackage:依据项目生成jar文件以备依赖此项目时使用–mvninstall:将项目的jar文件添加到库中,–mvnsite:生成项目相关信息的网站–mvnclean:清除目标目录中的生成结果–mvneclipse:eclipse:生成Eclipse项目文件接下来我们看看稍微复杂点的地方,我们知道手动开始一个Javaweb项目比手动开始一个简单的Java项目更耗时,然而Maven的使用则能化难为易。下面的例子(实际上是一行命令)展现了项目结构的构造。mvnarchetype:create-DgroupId=com.oreilly-DartifactId=Oreilly-DarchetypeArtifactId=maven-archetype-webapp生成的结果结构如下所示:Oreilly—-src—-main—-resources—-webapp—-WEB-INF这一次,我们的项目由于支持了将包含在war文件中的web资源而设置有所不同。pom.xml文件中将包含一行来表明项目应该被打包成war文件:war。现在就可以使用mvnpackage命令来生成war文件。不用担心如何从WEB-INF/lib目录中得到依赖项,在依赖属性值被设置成compile的情况下,Maven会自动包含依赖项。也可以将以下代码添加到pom.xml文件中来改变war文件的名称:PromoteC依赖管理创建好项目结构,添加完一些代码,测试并编译好应用程序后,接下来可以看看Maven是如何处理依赖关系的。为了给项目添加一个依赖项,必须将此依赖项添加到pom.xml文件中。下次运行Maven的时候,它将从Ibiblio存储库中得到这个依赖项,并且将此依赖项添加到项目构建路径中。关于依赖的问题有几个重要的事情值得注意。在写这篇文章的时候,Maven中最大的麻烦之处就是不能从Maven存储库中获取Sun的jar文件。这个问题归因于Sun在其代码中设置的许可证限制。解决这个问题的办法有两种,一种是下载这些代码并将它们安装在您本地的存储库中,另一种是做一个外部声明,并将这个声明指向文件系统中依赖项所在的位置。希望Sun能够尽早地创建自己的存储库,尽管如此,Maven也会被升级来使之能够下载这些资源,只是在下载之前它会提示用户接受许可证协议。另外一个麻烦的地方就是有时候使用的最新的库文件可能在远程存储库中不存在。另一种可能是由于无法访问Internet,需要所有的依赖项都能在本地获取。这些问题的最好解决方案就是将jar文件安装到本地的存储库中。将本地的存储库放在一台web服务器上也同样是个便利之举,这样整个开发团队就能从此获益,每个人都没有必要去管理自己的存储库了。改变Maven的存储库路径只需简单地编辑其安装目录下conf文件夹下面的settings.xml文件即可。在Maven中使用依赖是简单的。让我们看看往上述pom.xml文件中添加一个依赖项的情况。我们虽然已经使用了JUnit,但让我们将功能强大的Quartz库添加到项目中。Quartz是一款用纯Java编写的关于时间安排的开源项目,它是您时间安排需求方面的很好的选择。quartzquartz1.5.1compile我们仅仅只需添加这个元素,Maven就能下载Quartz并将其作为项目中的一个依赖项。不用担心Quartz的依赖项,一个Maven的存储库将包含依赖项自身依赖的资源信息,当Maven下载Quartz的时候,它自身的依赖资源也同样会被下载。为了验证版本为1.5.1的Quartz存在于Ibiblio库中,我们可以浏览Maven存储库。注意到scope参数的使用,它告诉了Maven依赖项在何种阶段是所需的。在使用JUnit的情况下,我们设置scope参数的值为test来告诉Maven这个依赖项只是在测试阶段所需的,而不是运行时所需的资源。以下是scope参数值的说明:–compile:默认值。表明是所有任务所需的资源–test:运行所有的测试用例时所需资源–runtime:表明是运行时所需资源–provided:JDK部分或应用服务器的classpath所需的资源现在,如何处理那些麻烦的Sun的jar包和那些需要但却不能在远程存储库中找到的jar包了?我们必须使用Maven来手动将这些jar包安装到本地的存储库中。不用担心,这没有听上去那么困难。为了做个示例,我们将安装JavaActivation框架的jar包。首先我们必须从Sun的站点上下载此jar包,接着我们使用Maven将它导入本地的存储库中。您自己也可以按照Maven上传资源指南中的指导将缺少的jar包安装到Ibiblio中。mvninstall:install-file-Dfile=activation.jar-DgroupId=javax.activation-DartifactId=activation-Dversion=1.0-Dpackaging=jar现在,新的jar包就像其它的项目依赖项一样安装到了本地存储库中。在只需添加依赖声明后,我们就已准备就绪了。在添加jar包和声明它们为依赖项时,必须确保版本信息的正确性。版本的不匹配会导致Maven在寻找资源时的失败。在导入Sun的jar包时,如果您需要寻求标准命名参数的帮助,可以参考Sun标准jar包命名。记住,在目前您不能通过存储库来公开发布这些jar包,这将违反Sun的使用条款。javax.activationactivation1.0compile您或许想将依赖项存入一个源代码控制器的库中,源代码控制器决不能执行这个任务。依赖项是经常变化的,并且通常有一套数字方案来标明其版本。这就是说,您明确地希望有一个内部远程存储库的备份,如果您有一个,这将确保在存储库服务器崩溃并且不能恢复的情况下,您不会丢失所有的自定义资源。不将依赖项放入源代码控制器中也会节省源代码控制器的存储库服务器上的大量磁盘空间。配置存储库要求项目的每个开发者必须在conf目录中配置存储库是不方便的,所以Maven可以同时查看多个存储库并且将它们全部配置在pom.xml文件中。让我们看看一个例子,它展示了如何在应用程序用使用多个存储库。在以下从pom.xml文件摘录的片断中,我们设置了两个存储库来让Maven寻找依赖项。Ibiblio一直是默认的存储库,我们又添加了PlanetMirror作为后援存储库。我们也可以让团队使用的本地web服务器作为第二个存储库。IbiblioIbiblio://public.planetmirror.
本文标题:Maven 参考文档
链接地址:https://www.777doc.com/doc-5065198 .html