先决条件(Prerequisites)

你一定已经了解了如何安装maven在你的电脑上,如果你还不知道改如何安装maven的话,你可以通过询问身边的同事或者同学,也可以通过网络搜索来查看如何安装,这里我们对这个问题不做过多的解释。

Maven安装(Installation)

Maven是一个JAVA工具,所以你在安装前要保证你已经在自己的电脑上安装了JAVA。首先下载Maven并且跟着它的安装介绍进行安装,安装完成后,然后打开你的电脑的“终端”或者是“命令提示符”,然后输入:

mvn --version



如果安装成功的话,将会输出安装的maven的版本信息,例如:

Apache Maven 3.3.3 (7994120775791599e205a5524ec3e0dfe41d4a06; 2015-04-22T19:57:37+08:00)
Maven home: /Users/apache-maven-3.3.3
Java version: 1.7.0_79, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "mac os x", version: "10.11.4", arch: "x86_64", family: "mac"



根据你的网络设置,你可能需要额外的配置一些信息,如果需要的话查看一下

Maven配置信息的方法。

如果你使用的是Window系统的电脑,你需要查看一下Windows系统Maven安装方法介绍以确保你的Maven可以正常的运行。


创建一个项目(Create a project)

现在你需要创建一个目录用来存放你即将创建的项目,然后通过命令行的方式进入你当前的目录中去,然后执行如下的Maven命令:

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



如果你只是安装了Maven的话,上面的命令可能需要一段时间来执行,只是因为Maven需要下载一些最新的模板(插件的jar包和一些其它文件)在你的本地仓库,你也可能多次的执行这个命令来确保成功,这是因为远端服务器有可能在你下载完成前已经超过了最长连接时间造成了中断,不要担心,多尝试几次就好啦。

下面便是你创建的项目的标准文件结构


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 目录下面包含的是测试代码,pox.xml文件中的是项目对象模型。


pom文件(The Pom)

pom.xml文件是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>



我们需要做些什么呢(What did I just do?)

你执行的Maven命令:archetype:generate和各种各样的参数命令。包含了archetype前缀的命令是插件的一些命令。如果你更加熟悉Ant工具的话,你可以将此设想为相似的任务。依靠archetype这些命令可以创建了普通的项目,现在可以满足我们需求的一个插件是收集了相应目标的绝大部分公共意图。例如Jboss-maven-plugin,绝大部分目的是用来应对各种各样的jboss组件。


构建项目(Build the project)

mvn package



这个命令行会打印出各种各样的行为,并且以下图这样的方式结束

[INFO] Building jar: /Users/my-app/my-app/target/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 46.853 s
[INFO] Finished at: 2016-03-31T11:00:14+08:00
[INFO] Final Memory: 14M/120M
[INFO] ------------------------------------------------------------------------



并不像第一次执行的命令(archetype:generate),你可能注意到第二个命令仅仅是一个单词:package,与其说是一个命令,倒不如说是一个阶段。每个阶段都是构建项目生命周期的一步通过整个序列的阶段。当某一阶段执行时,Maven将会执行该序列中的每个阶段通过已经定义好的序列。例如,如果我们执行了compile阶段,事实上下面的每个阶段都会别执行:

1、validate
2、generate-sources
3、process-sources
4、generate-resources
5、process-resources
6、compile



你如果有最新的compiled和packaged JAR并输入下面的命令:

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



接下来将会输出:

Hello World!



运行Maven工具(Running Maven tools)

尽管很难有一个综合的列表,但是下面的这些阶段绝大部分都是我们项目生命周期需要执行的:


  • validate: 验证项目的正确性和项目所必需的信息是否可用
  • compile: 编译项目代码
  • test: 测试编译的代码利用恰当的测试框架,这些测试并不需要项目打包或者部署
  • package: 将编译好的代码按照可分配的格式进行打包,例如打成一个JAR包
  • integration-test: 加工并且部署编译好的包,如果有必要的话将环境信息插入以保证整合的测试可以正常的运行
  • verify: 运行某些验证以判定该包是可运行的并且满足质量标准
  • install: 安装该包到本地仓库,供本地的其他项目作为一个附属进行使用
  • deploy: 进行集成或者部署到发布环境中,拷贝最终版本到远程仓库已供其他开发或者是项目使用



这里还有两个用于构建Maven生命周期的不属于默认列表里面命令,他们分别是:


  • clean: 清理掉之前构建的项目文件
  • site: 为该项目生成站点文档

每个阶段实际上都映射到了这些基础的命令。明确的命令执行每个阶段是依赖于项目的打包类型的。例如,如果项目的类型是JAR的话,打包的时候将会执行jar:jar,如果项目的类型是WAR的话,你的打包的时候回执行war:war

一个有趣的事情需要被注意的是:阶段和命令有可能会按照一个特定的序列来执行,例如:


<span style="font-size:18px;">mvn clean dependency:copy-dependencies package</span>



上面的命令将会清理该项目生成文件,拷贝附属项目,然后重新打包该项目(执行所有的阶段直到打包完成),执行结果如下:

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-app ---
[INFO] Building jar: /Users/my-app/my-app/target/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:57 min
[INFO] Finished at: 2016-03-31T14:07:41+08:00
[INFO] Final Memory: 17M/158M
[INFO] ------------------------------------------------------------------------



生成站点(Generating the Site)


<span style="font-size:18px;">mvn site</span>



这个阶段依靠项目中的Pom文件生成一个站点,你能够在target/site下面看到生成的文档文件,执行结果如下


<span style="font-size:18px;">[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20.585 s
[INFO] Finished at: 2016-03-31T14:45:38+08:00
[INFO] Final Memory: 30M/355M
[INFO] ------------------------------------------------------------------------</span>






结论(Conclusion)

我们希望这里的快速的概述能够激起你对多元化的Maven的浓厚的兴趣。这里的只是一个被删减的快速浏览手册,现在你准备好更加综合的详细的关于该平台的所有行为。