`
freeman983
  • 浏览: 232244 次
社区版块
存档分类
最新评论

Maven 2.0: Compile, Test, Run, Deploy, and More

阅读更多
作者:Chris Hardin;mycj(作者的blog:http://blog.matrix.org.cn/page/mycj)
原文:http://www.onjava.com/pub/a/onjava/2006/03/29/maven-2-0.html
Matrix:http://www.matrix.org.cn/resource/article/44/44475_Maven2.html
关键字:Maven2

Maven2.0的优点

Maven2.0有许多很好功能,这些功能不仅仅是帮助您构建项目。如果您刚刚开始启动一个Java项目,并且想使该项目快速地开展下去,Maven2.0能够在几分钟内达到您的要求。以下是Maven2.0的一些优点:
--标准的项目布局和项目结构生成器
--标准的依赖管理机制
--多项目支持
--在开发者需要的时候及时地下载新的插件和功能部件
--生成最新项目信息的网站
--集成了源代码控制软件:CVS和Subversion

以上列表展示的只是Maven2.0特点中的一小部分。但这足以使Maven2.0成为一个构建管理系统可靠的选择。既然我们已经知道Maven是个什么东西了,接下来让我们看看如何使用它。

入门

我们要做的第一件事情就是设置目录结构,但这并不需要让我们手动设置,Maven会根据您开发的项目类型来为您做这件事。一旦您下载并解压了最新发布的 Maven 2.0,您应该将Maven所在目录下面的bin目录添加到您的系统路径下。您可以运行命令mvn -version来测试您的安装。

既然已经安装上了工具,让我们看看创建一个简单的Java项目的例子。Maven使用原型来决定目录结构是如何展现的。Maven自带了几个内建的原型,您也可以自定义原型。

mvn archetype: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的依赖以此来鼓励单元测试。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
       <groupId>com.oreilly</groupId>
       <artifactId>my-app</artifactId> 
       <packaging>jar</packaging>
       <version>1.0-SNAPSHOT</version>
       <name>Maven Quick Start Archetype</name> 
       <url>http://maven.apache.org</url> 
       <dependencies><dependency>    
       <groupId>junit</groupId>     
       <artifactId>junit</artifactId>  
       <version>3.8.1</version>  
       <scope>test</scope> 
       </dependency> 
       </dependencies>
</project>

创建完项目后,我们可以往项目里添加代码并使用Maven的所有全新技巧。注意以下命令必须在pom.xml文件所在的目录中运行。
--mvn test:运行应用程序中的单元测试
--mvn package:依据项目生成jar文件
--mvn install:将项目的jar文件添加到库中,以备依赖此项目时使用
--mvn site:生成项目相关信息的网站
--mvn clean:清除目标目录中的生成结果
--mvn eclipse:eclipse:生成Eclipse项目文件

接下来我们看看稍微复杂点的地方,我们知道手动开始一个Java web项目比手动开始一个简单的Java项目更耗时,然而Maven的使用则能化难为易。下面的例子(实际上是一行命令)展现了项目结构的构造。
mvn archetype:create -DgroupId=com.oreilly
    -DartifactId=Oreilly
    -DarchetypeArtifactId=maven-archetype-webapp

生成的结果结构如下所示:
Oreilly
----src
    ----main
        ----resources
        ----webapp
            ----WEB-INF

这一次,我们的项目由于支持了将包含在war文件中的web资源而设置有所不同。pom.xml文件中将包含一行来表明项目应该被打包成war文件: <packaging>war</packaging>。现在就可以使用mvn package命令来生成war文件。不用担心如何从WEB-INF/lib目录中得到依赖项,在依赖属性值被设置成compile的情况下,Maven会自动包含依赖项。也可以将以下代码添加到 pom.xml文件中来改变war文件的名称:

<build>  
      <finalName> PromoteC </finalName>
</build>


依赖管理

创建好项目结构,添加完一些代码,测试并编译好应用程序后,接下来可以看看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编写的关于时间安排的开源项目,它是您时间安排需求方面的很好的选择。

<dependency> 
     <groupId>quartz</groupId>  
     <artifactId>quartz</artifactId>
     <version>1.5.1</version>
     <scope>compile</scope>
</dependency>

我们仅仅只需添加<dependencies>这个元素,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包安装到本地的存 储库中。不用担心,这没有听上去那么困难。为了做个示例,我们将安装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在寻找资源时的失败。在导入Sun的jar包时,如果您需要寻求标准命名参数的帮助,可以参考Sun 标准jar包命名。记住,在目前您不能通过存储库来公开发布这些jar包,这将违反Sun的使用条款。

<dependency>
     <groupId>javax.activation</groupId> 
     <artifactId>activation</artifactId>  
     <version>1.0</version>  
    <scope>compile</scope>
</dependency>

您或许想将依赖项存入一个源代码控制器的库中,源代码控制器决不能执行这个任务。依赖项是经常变化的,并且通常有一套数字方案来标明其版本。这就是说,您明确地希望有一个内部远程存储库的备份,如果您有一个,这将确保在存储库服务器崩溃并且不能恢复的情况下,您不会丢失所有的自定义资源。不将依赖项放入源代码控制器中也会节省源代码控制器的存储库服务器上的大量磁盘空间。
分享到:
评论
1 楼 shilimin 2007-08-20  
引用
真好

相关推荐

    MavenRunHelper.zip

    2. **一键运行与调试**:用户可以通过简单的点击操作,执行Maven的各种生命周期阶段,如`clean`、`compile`、`test`、`install`和`deploy`,无需记住复杂的命令行语法。 3. **依赖管理**:MavenRunHelper支持添加、...

    maven常用命令

    16. 只测试而不编译,也不测试编译:`mvn test -skipping compile -skipping test-compile` 其他命令 17. 清除 Eclipse 的一些系统设置:`mvn eclipse:clean` 18. 查看当前项目已被解析的依赖:`mvn dependency:...

    Maven入门培训

    Maven的生命周期包括compile、test、package、install和deploy五个主要阶段。开发者可以根据需要在这些阶段插入插件目标,自定义构建流程。 **7. Maven插件** Maven插件是实现特定构建任务的组件,如编译、测试、...

    eclipse+maven环境搭建.zip

    在Java开发领域,Eclipse和Maven是两个非常重要的工具。Eclipse是一款强大的集成开发环境(IDE),而Maven则是一种项目管理和构建工具。本文将详细介绍如何搭建Eclipse与Maven的集成环境,帮助开发者更高效地进行...

    maven tomcat 服务器

    Maven有三个主要的生命周期阶段:compile、test和install。每个阶段包含一系列的目标(goals),如`clean`用于清理项目,`compile`用于编译源代码,`test`执行单元测试,`install`将项目安装到本地仓库。Maven通过...

    apache-maven-3.6.3安装包

    Maven生命周期包括三个主要阶段:编译(compile)、测试(test)和打包(package)。每个阶段由一系列的阶段(goals)组成,例如`clean`预清理项目,`install`将项目安装到本地仓库。 5. **插件(Plugins)** ...

    maven完整教程

    4. **生命周期 (LifeCycle)**: Maven有三个主要的生命周期阶段:compile、test和install。每个阶段包含多个阶段(或称为goals),如compile阶段包括编译源代码,test阶段执行单元测试,install阶段将项目安装到本地...

    maven的安装文件以及集成TOMCAT、eclipse的教程

    4. **生命周期与构建阶段**: Maven拥有丰富的生命周期,如`clean`、`compile`、`test`、`install`和`deploy`等,分别对应清理、编译、测试、安装到本地仓库和部署到远程仓库等操作。 5. **插件**: Maven通过插件...

    idea创建基于maven的web工程共6页.pdf.zi

    6. 编译与运行:说明如何在Idea中使用Maven进行编译、测试、打包和运行Web项目,如执行`mvn compile`、`mvn test`、`mvn package`、`mvn tomcat7:run`等命令。 7. 插件使用:介绍Maven插件的概念,以及如何利用...

    Maven3.3.9安装文档

    - **Default生命周期**:主要构建过程,包括`compile`、`test`、`package`、`install`、`deploy`等命令。 - **Site生命周期**:生成项目站点信息,包括`site`命令。 #### Maven与Eclipse集成 - **安装M2e插件**:M2...

    Eclipse3 Maven插件

    - 使用Maven的生命周期和构建阶段,如clean、validate、compile、test、package、install、deploy等。 - 利用Maven的 profiles 特性,为不同的环境(如开发、测试、生产)定制不同的配置。 - 使用Maven的...

    maven入门文档

    - **常用命令**:`mvn clean`清除构建结果,`mvn compile`编译源代码,`mvn test`运行测试,`mvn package`打包项目,`mvn install`将打包好的文件安装到本地仓库,`mvn deploy`部署到远程服务器。 - **Eclipse中的...

    搭建maven项目流程

    你可以通过命令行运行`mvn clean`、`mvn compile`、`mvn test`等命令来执行相应的生命周期阶段。 8. **设置本地和远程仓库**:Maven会从本地仓库获取依赖,如果没有,则从远程仓库(如Central Repository)下载。在...

    maven插件(eclipse)

    - 生命周期集成:Maven 的生命周期(clean, compile, test, package, install, deploy)在 Eclipse 中可以直接执行,如通过右键点击项目选择“Run As” -&gt; “Maven Build”。 - 项目同步:当 pom.xml 发生更改时,...

    MyEclipe部署Maven详细

    - 使用Maven的生命周期和阶段来管理构建过程,如`compile`、`test`、`install`和`deploy`。 以上就是关于"MyEclipse部署Maven详细"的相关知识点,包括Maven的安装、MyEclipse中的集成、项目创建、POM配置、问题...

    mvn常用命令

    15. 只测试不编译,也不测试编译:`mvn test -skipping compile -skipping test-compile` 其他命令 16. 清除Eclipse的一些系统设置:`mvn eclipse:clean` `mvn -version/-v`显示版本信息 `mvn archetype:generate`...

    maven使用指南

    3. **生命周期与构建阶段**: Maven 提供了一个标准的生命周期,包括清理(clean)、编译(compile)、测试(test)、打包(package)、验证(verify)、安装(install)和部署(deploy)等阶段。开发者可以通过执行...

    maven3.0.4版本 java项目应用

    - **构建过程**:通过`mvn compile`命令编译源代码,`mvn test`执行测试,`mvn package`打包项目,`mvn install`将构建好的项目安装到本地仓库。 - **部署与发布**:`mvn deploy`命令可以将项目部署到远程服务器或...

    maven管理工具

    在实际开发中,Maven与Tomcat的集成通常通过Maven的Tomcat插件实现,例如`mvn tomcat7:run`可以直接在本地启动Tomcat服务器并部署项目,无需手动操作,极大提升了开发效率。 总结,Maven作为Java开发的强大工具,其...

    eclipse的maven插件

    3. **构建和清理**:通过右键点击项目,选择“Run As” -&gt; “Maven Build”,可以执行Maven的各种生命周期目标,如编译(compile)、测试(test)、打包(package)、安装(install)和部署(deploy)。同时,也可以...

Global site tag (gtag.js) - Google Analytics