翻译: Ivan @愤怒的死胖子
转载请注明
前提
你必须知道如何在你的电脑上安装Maven。如果你不知道,请教下办公室里或学校里的其他人,或者雇一个人来解释。Maven的邮件列表并不是询问这个问题的最佳场所。
Installation
Maven是一个Java工具,所以你必须安装了Java才能继续。
首先,下载Maven并参照安装指南来安装。之后,在终端或者命令行输入以下命令
mvn --version
这将显示出你安装的Maven的版本,例如:
Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)
Maven home: D:\apache-maven-3.0.3\bin\..
Java version: 1.6.0_25, vendor: Sun Microsystems Inc.
Java home: E:\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配置指南
如果你使用的是Windows,你应该看一看Windows前置条件以确保你准备好了在Windows上使用Maven。
创建一个项目
你需要一个目录来存放项目,创建一个目录并在那里打开命令行或终端,执行以下的Maven命令:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
如果你是新安装的Maven,第一次运行时将会持续一段时间。因为Maven会下载最近的包(插件和其它文件)至你的本地仓库。你可能需要执行好几次直到它成功,因为你的下载还未完成,而远程服务器可能已经超时了。别担心,有很多办法可以解决这个问题。
你可能会注意到创建命令创建了一个与artifactId名字一样的目录。进到那个目录里。
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目录包含了项目的源代码,src/test/java包含了测试代码。pom.xml是项目的项目对象模型(Project Object Model),亦即POM。
POM
pom.xml文件是Maven中项目配置的核心。它是一个单独的配置文件,包含了按照所需的特定方式/方法来构建项目所应有的主要信息。POM相当巨大而且复杂度会令人望而生怯,但是现在我们还不需要理解所有复杂项目来高效地使用Maven。这个项目的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的目标(goal)archetype:generate,并附加了很多参数。前缀archetype是包含了目标(goal)的插件(plugin)。如果你熟悉Ant也可以将其理解为task。这个目标(goal)创建了一个基于archetype的简单项目。对于目前来说,插件(plugin)只要理解为一系列达到一般目的的目标(goal)集合就可以了。例如jboss-maven-plugin的目的就是“处理大量jboss项”
项目构建
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),第二个命令只是一个单独的字 - package。与目标(goal)相比,这只是一个步骤(phase)。步骤(phase)是构建周期中的一步,构建周期即为一组有序的步骤(phase)。当指定了一个步骤(phase)后,Maven将会执行这个步骤之前的所有步骤(phase),然后再执行这个步骤(phase)。例如,如果我们执行编译(compile)这个步骤,实际得到执行的步骤(phase)为:
- 验证
- 产生代码
- 处理代码
- 产生资源
- 处理资源
- 编译
你可以用以下命令测试新编译和打包的JAR:
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
显示出经典的:
Hello World!
运行Maven工具
Maven步骤(phase)
尽管很难有一个囊括所有的列表,以下列举了默认的周期中最常被执行的步骤(phase)。
- 验证: 验证项目是否正确,所有必需的信息是否完备。
- 编译: 编译项目的源代码
- 测试: 使用合适的单元测试框架测试编译的代码。这些测试不需要代码被打包或者部署。
- 打包: 使用编译好的代码打包至可分发的格式,例如JAR。
- 集成测试: 处理并部署至环境中,运行集成测试。
- 验证: 运行检查确保程序包可用并符合质量标准。
- 安装: 安装程序包至本地仓库,以便本地其它项目使用。
- 部署: 在集成或者发布环境中完成,复制最终程序包至远程仓库,以与其它开发人员和项目共享。
还有两个默认列表以外的Maven周期,他们是:
- clean: 清理上一次构建创造的文件。
- site: 创建项目的site文档。
步骤(phase)实际上被映射到了底层的目标(goal)上。每一个步骤(phase)所执行的特定目标(goal)取决于这个项目的包的类型。例如,当项目类型是JAR时执行jar:jar,而当项目类型是WAR时执行war:war。
一个值得注意的地方是步骤(phase)和目标(goal)可能会按照顺序执行。
mvn clean dependency:copy-dependencies package
这个命令会清理项目,复制依赖,打包项目(当然也包括执行打包之前的所有步骤(phase))。
产生Site
mvn site
这个步骤(phase)将会产生一个基于项目pom文件信息的site。你可以看一看target/site下产生的文档。
总结
我们希望快速的梗概能够使你对Maven的多元化有兴趣。请注意这是一个缩减了的快速开始指南。现在你已经可以开始学习刚才所有操作中更为复杂的细节了。请参考Maven Getting Started Guide。