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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。