Maven使用简要说明
前置条件
首先你要会安装软件,如果不会的话,问你办公室、学校里的人,或者花钱请人给你解释一下。
安装
Maven是一个java工具,所以你必须安装了java才能继续下面的步骤。
首先,下载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"
创建工程
你需要一个目录来存放你的工程文件。先创建一个文件夹,然后在文件夹下打开命令行输入以下命令:
- mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
如果你刚刚安装maven,当你第一次运行的时候可能需要一会。因为要下载一些需要的jar和其他文件到你的仓库。你可能需要多试几次才能成功,因为远程的服务器可能会在你下载完成之前超时。不用担心我们有办法解决。
你可能会注意到生成目标创建了一个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
在Maven里
pom.xml
文件是项目设置的核心。它正是你想要的那种一个设置文件就包含生成一个工程的大部分设置的方式。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,你会认为这个和Ant的task很相似。goal以archetype为基础创建一个简单的工程。
现在就可以说明一个插件是一个具有一般通用目的的目标集合。
例如
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
“而不是一个目标。这是一个阶段。一个阶段就是构建生命周期里的一步,构建生命周期就是一个有顺序的阶段序列。当给出一个阶段,Maven将执行序列中的每一个阶段包括定义的。例如我们执行compile阶段,事实上以下阶段都会得到执行:
- (验证)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阶段
尽管很难算得上是一份详尽的清单,但这些都是最常见的被执行的默认生命周期阶段。
- 检查(validate): 检查工程是否正确,所有必要的信息是否可用。
- 编译(compile): 编译这个工程的源码。
- 测试(test): 用合适的单元测试框架测试编译好的代码。这些测试不应该要求代码被打包或部署。
- 打包(package): 将编译好的代码打包成分发的格式,例如JAR。
- 整体测试(integration-test): 将包部署到可以做整体测试的环境中。
- 认证(verify): 运行任何的检查程序确认包是有效的且符合质量标准的。
- 安装(install): 将包安装到本地仓库,以便在其他的工程中作为本地依赖添加。
- 部署(deploy): 在完整的或是发布环境中执行,复制最终的包到远程仓库,以便分享给其他开发者或工程。
除此之外还有两个阶段:
- 清空(clean): 清空之前构建的工程。
- 网站(site): 生成网站文档。
阶段实际上被映射到下面的目标。目标执行的每个阶段取决于工程的打包类型。例如,如果工程类型为JAR那就执行
jar:jar
,如果是WAR就执行
war:war。
有意思的是阶段和目标可以被按顺序执行:
- mvn clean dependency:copy-dependencies package
这个命令会清空项目,复制依赖并且打包工程(当然,由包决定执行的所有阶段)。
生成网站
- mvn site
这个阶段生成的网站取决于工程的pom信息,你可以在
target/site
下查看生成的文档。