Page tree
Skip to end of metadata
Go to start of metadata

在本页面中对 Maven 的使用将会做一些说明和介绍。

在翻译和处理本页面中,涉及到 2 个非常重要的词,一个是 goal,另一个是 phase。这 2 个词对理解 Maven 有着非常大的影响,我们在页面的前面将这 2 个词进行一个简短说明。如果您不理解说明的内容,也没有关系,在阅读后面的内容的时候就能比较明确其具体的意义的。

当然我们的翻译也不是很准确,如果您有什么建议,你可以对页面直接进行评论,或者发送电子邮件到地址:[email protected] 中。

重要的中英备注

构建目标(goal):在软件项目中,我们通常对项目的目的有一个比较明确的定位。比如说,一个软件项目的目的是提供工具类,一个软件项目的目的是可部署运行的网站。对 Maven 来说,上面的 2 个目的就称为构建目标,使用 Maven 之前你需要知道你项目的目标是什么,然后根据你项目的目标为你的 Maven 设置构建目标。

构建短语(phase):在 Maven 进行实际编译打包的过程中,很多时候虽然是一个命令,但是在这个命令下有很多执行的子命令或者执行序列。我们在对 Maven 项目进行某一个有目的性的动作的时候,比如说打包,比如说发布,比如说清理软件工程。这些在 Maven 中都被定义为构建短语。可以将构建短语理解为为了达到某个目的而运行的命令。

 

安装需求

你需要对如何在计算机系统中安装软件有一些基本的了解。如果你对如何在计算机中安装软件不了解的话,你需要咨询你的同时或者同学或者一些了解的人。

如果你尝试想 Maven 的电子邮件组中发送有关安装软件的内容,通常也不会得到很有效的信息。

安装 Maven

Maven 是一个 Java 的运行工具,所以你需要在你的计算机上安装 Java 运行环境后才能执行有关 Maven 的操作。

通常这个对 Java 的程序员来说没有什么问题。

首先,请下载 Maven 的安装程序,然后按照安装程序中的说明对 Maven 在你计算机上的使用做出配置。

有关 Maven 安装配置的说明和主程序下载链接,请参考页面 安装和配置 Maven 中的说明。

请注意, Mava 作为一个 Java 的运行工具,是不需要在系统中进行安装的,在计算机系统中使用 Maven 或者对 Maven 环境进行配置的主要操作就是需要在系统中设置 PATH,能够让系统能够正确调用 Maven 的命令。

当你完成所有配置后,你可以尝试在你的终端环境下输入下面的命令:

mvn --version

你应该看到你的计算机上的输出,如果你能看到下面的输出,则说明你的 Maven 环境已经配置正确了。

Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100)
Maven home: D:\apache-maven-3.0.5\bin\..
Java version: 1.6.0_25, vendor: Sun Microsystems Inc.
Java home: C:\Program Files\Java\jdk1.6.0_25\jre
Default locale: nl_NL, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

基于你使用的网络环境,你的 Maven 安装实例可能要求您进行进一步的配置,请参考页面 配置 Maven 中的信息对你的 Maven 安装实例进行配置。

如果你是使用 Windows 的操作系统,你需要参考页面 基于 Windows 2000/XP 操作系统安装 Maven 中的内容,来确保你的计算机满足安装 Maven 的所有需求。

新建一个项目

你需要知道你将要在哪里保存你的项目,在你需要保存项目的地方新建一个目录。然后在你的命令行中将路径移动到这个目录下并且开始执行下面的命令:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

如果你是第一次在你的计算机中运行 mvn 这个命令,可能这个命令需要执行比较长的时间,这是因为 Maven 需要从远程服务器上下载需要的包(插件和其他文件)到你的本地仓库中。

你也有可能需要执行这个命令好几次才能完成,这是因为网络的问题,Maven 在下载包的时候可能会导致超时,然后你需要再次运行这个命令来完成下载。不过不用担心,Maven 会自行处理这个问题的。

这是你也许已经注意到了,Maven 将会根据你给的包的名称创建一个与包一样的名字的目录。进入到这个目录中。

cd my-app

在这个目录下面,你可以看到下面 标准目录布局

my-app
|-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mycompany
    |               `-- app
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mycompany
                    `-- app
                        `-- AppTest.java

目录 src/main/java directory 中保存了所有项目的源代码。

目录 src/test/java 中保存了所有的测试源代码。

pom.xml 文件为项目对象模型(project's Project Object Model)或者我们可以简称为 POM。

POM 文件

pom.xml 文件保存了项目在 Maven 中的配置信息。这是一个单一的配置文件,这个配置文件中包含了构建一个 Maven 项目的所有必要的信息。

POM 文件可能非常庞大,也可能非常复杂,但是现在还没有必要完全弄清楚 POM 中的所有内容。

本项目的 POM 文件为:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>Maven Quick Start Archetype</name>
  <url>http://maven.apache.org</url>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>

我刚才做了什么

你刚才执行了 Maven 的命令 archetype:generate,然后向命令中指定了一系列的参数。在上面的命令中, archetype 指定了命令执行的目的。

如果你对 Ant 比较熟悉的话,你可以将你执行的命令想象为一个 任务(Task)。其目的是创建一个基于归档类型(archetype)的一个简单项目。

现在需要说明的是,针对插件而言,我们定义为完成某一种通用目的的集合。例如:jboss-maven-plugin 的目的就是处理与 jboss 有关的内容。

构建(Build)项目

执行下面的命令:

mvn package

这个命令将会在系统中运行并且输出一些内容,这个命令的末尾输出的内容为:

 ...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Thu Jul 07 21:34:52 CEST 2011
[INFO] Final Memory: 3M/6M
[INFO] ------------------------------------------------------------------------

不像我们开始执行的命令 archetype:generate,现在执行的 Maven 命令非常简洁,只有一个参数 -package。

这个不是告诉 Maven 需要执行的目标,而是一个构建短语。

构建短语通常是在 构建生命周期 中使用的,通常是一些具有特定顺序的参数。当一个构建短语在 Maven 中被执行,Maven 会按照这个构建短语的定义按照顺序执行所有必要的任务。

例如,如果你希望在 Maven 执行 compile 这个短语的话,Maven 的执行顺序为:

 

  1. 校验(validate)
  2. 生成源代码(generate-sources)
  3. 处理源代码(process-sources)
  4. 生成资源(generate-resources)
  5. 处理资源(process-resources)
  6. 编译(compile)

你也可以使用下面的命令来对你生成的 JRA 包进行测试:

java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App

你将会看到系统的输出为:

Hello World!

至此,利用 Maven 构建一个项目的基本过程已经简单的介绍完了。

运行 Maven 工具

在使用 Maven 进行构建的时候,我们可能会常常用到 Maven 提供的一些工具。

Maven 构建短语

虽然在 Maven 进行构建的时候没有一个全面的列表,但是在软件构建生命周期中还是有些默认可以被执行的短语。

 

  • 校验(validate):对你的项目进行校验,确认项目是正确的同时所有需要的信息都是可用的。
  • 编译(compile):对项目使用的源代码进行编译。
  • 测试(test):使用测试框架对编译的源代码进行测试。这个在对项目进行打包或者部署的时候不要进行。
  • 打包(package):将编译好的代码打包成一个分发格式,例如 JAR 格式。
  • 整合测试(integration-test):必要的时候,可以将包处理和部署到可以运行测试的环境中。
  • 验证(verify):运行所有的检查来验证包是可用的同时满足所有的关键指标。
  • 安装(install):将包安装到本地仓库中,供其他项目进行使用。
  • 部署(deploy):完成整合或者发行环境后,拷贝最终的包到远程仓库中为共享给其他项目或者开发人员使用。

有其他 2 个 Maven 生命周期超越了上面默认的列表,他们是:

  • 清理(clean):清楚在上一次编译过程中创建的所有软件包。
  • 站点(site):为这个 Maven 项目生成所有需要的文档。

构建短语实际上是映射到底层的构建目标。每一个构建短语执行特定的构建模板,而且这个依赖于你的软件项目类型和打包类型。

例如,如果你希望打包为一个可以执行的包,你会使用构建目标 jar:jar ;如果你希望打包一个 WAR 软件项目,你会使用 war:war 构建目标。

Maven 还有一个有趣的地方,构建短语和构建目标可以在 Maven 中按照顺序依次执行,请参考下面的命令:

mvn clean dependency:copy-dependencies package

上面的命令将会首先对项目进行清理,然后拷贝所有依赖的软件包,最后对项目进行打包(在进行软件打包的时候将会执行所有的需要的构建短语)。

创建一个站点

我们可以使用 Maven 把我们项目所有的文档都生成出来,同时还可以按照 Maven 提供的模板生成一个项目站点。

使用下面的命令:

mvn site

上面的构建短语将会基于项目 pom 文件中提供的信息来为项目生成一个站点。

你可以在目录 target/site 下查看生成的站点和文档。

结束语

我们希望上面提供的 5 分钟 Maven 指南 能够让你对 Maven 产生浓厚的兴趣。

请注意,这个是一个非常简短的 Maven 快速指南,只覆盖了 Maven 使用的小部分内容。现在你应该希望能够了解更多有关 Maven 的内容和知识,请参考页面 Maven 指南 中的内容。

  • No labels