环境搭建(这里只讲linux下,windows下同理,只是环境变量配置方式不同)
- 首先到maven的官网下载对应的二进制.tar.gz包,将对应的包解压到你指定的目录下
- 配置环境变量,在/etc/profile文件最后一行后面添加路径,例如我的为:
#maven path configuration by eric
export PATH=/home/eric/software/apache-maven-3.5.0/bin/:$PATH
你只需要将路径替换为你的路径即可
- 退出shell,重新登入即可生效
- 在shell中 输入mvn -v ,若是弹出与如下类似的信息则说明配置成功
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 in 5 Minutes
以下内容来自于maven官网的翻译,只对其中重要的进行翻译,无关内容跳过。但每一步亲自运行过(最好不要使用JDK9,因为JDK9的一些新特性会导致运行时报错,这些错误也可以纠正,但是作为新手就不要难为自己了)。
安装
已经讲过,这里就不赘述
创建一个工程
你需要一个目录存储你的工程,你可以选择新建一个目录或者在那个目录中打开shell。在你的命令行中执行以下maven goal:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
如果你是刚刚才安装的maven,这可能要执行一会(实际执行了挺久)。这是因为maven正在下载最新的模块(plugin jars and other files)到你的本地仓库中。你可以能要执行好多遍这个命令才会最终成功。这是因为在你完全下载号之前远程服务器可能超时,因此下载会失败,但是不用担心,总会成功。
你会注意到generate goal创建了一个和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文件(是maven的核心配置文件),POM
The POM
pom.xml是maven的工程配置文件的核心。它是一个单独的文件,包含了编译该工程的主要信息,该信息可有你指定。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 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] ------------------------------------------------------------------------
你或许注意到第二个命令一个单独的命令package, 与第一个不同。这条命令不是一个goal, 这是一个phase。一个phase是编译生命周期的一个步骤,编译生命周期是有序的phase排列。当给出一个phase,maven将会执行每一个phase直到包含给定的phase。例如,如果我们执行compile phase, 被执行phase实际上如下:
- validate
- generate-sources
- process-sources
- generate-resources
- process-resources
- compile
你可以用如下的命令测试新编译的JAR
java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
将会打印出
Hello World!
运行Maven工具
maven Phases
尽管很少有一个综合性的清单,如下是一些最常用的phases执行的生命周期
- validate:确认这个工程是正确的,并且所有的必要信息是可以获取到的。
- compile:编译工程的源文件
- test:使用一个合适的测试框架测试经过编译的源文件。这些测试不要求源代码被打包或部署
- package:获取编译的源文件,并且以发布格式打包,例如JAR
- integration-test:如果有必要话,执行和部署这个包到集成测试可以被执行的环境
- verify:运行所有核查确保该包是有效的,同时也达到了质量标准
- install:安装这个包到本地仓库,作为其他本地仓库的依赖
- deploy:做一个集成或者发布环境,复制最终的包到远端仓库与其他开发者或工程共享
有两个不在以上默认列表的maven声明周期,分别是: - clean:清除由前面的编译过程产生的文件
- site:为这个工程生成文档
Phases通常与goal有关。明确的goal所执行的phase是依赖于工程的包的类型。例如,package执行jar:jar如果这个工程的类型是JAR,执行war:war如果 这个工程的类型是WAR。
一个有趣的要提的注意点是phases和goals是可以以一定顺序执行的。
mvn clean dependency:copy-dependencies package
这个命令将会清除这个工程,复制依赖,打包工程(当然也要执行所有直到package的phase)。
Generating the Site
mvn site
这个phase将会产生一个依赖于项目POM配置的文档。你可以查阅在target/site下产生的文档。
结论
我们希望这个速览可以激发你对maven丰富的功能探索的兴趣。记住这是一个简要的速览。接下来需要详细了解更多细节,请访问maven教程