maven使用说明
-
前提条件
你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。
-
安装Maven
Maven是基于java的工具,所以你的电脑上必须安装了java环境。
首先,下载Maven和按照安装说明进行操作。然后,在终端或在命令行中键入以下命令:
1
|
mvn --version |
终端或命令行中应该打印出本机所安装的Maven的版本,如下:
1
2
3
4
5
6
|
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 23:22:22+0800) Maven home: /usr/local/apache-maven-3 .1.1 Java version: 1.6.0_65, vendor: Apple Inc. Java home: /System/Library/Java/JavaVirtualMachines/1 .6.0.jdk /Contents/Home Default locale: zh_CN, platform encoding: EUC_CN OS name: "mac os x" , version: "10.9.1" , arch: "x86_64" , family: "mac" |
如果是Windows环境,格式应该类似这样:
1
2
3
4
5
6
|
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配置向导。
如果使用的是Windows环境 ,你应该看看Windows安装前提条件,来确保能够在Windows上使用Maven。
-
创建Maven项目
首先,创建存放项目的目录(例如d:\maven_proj或者/Users/xxx/maven_proj),打开终端或者命令行,切换到该目录下,执行以下Maven命令:
1
|
mvn archetype:generate -DgroupId=com.oschina. test -DartifactId=my-maven- test -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode= false |
如果是刚安装了Maven的,第一次运行可能需要一段时间。这是因为Maven正在从网上下载大部分最近的artifacts (plugin jars and other files)到你的本地仓库。可能需要执行几次该命令才能成功。这是因为在下载完成之前,远程服务器的连接可能超时。
输出的命令行可能类似:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
[WARNING] [WARNING] Some problems were encountered while building the effective settings [WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...< /activeProfiles >\n -->\n <activeProfile>... @278:18) @ /usr/local/apache-maven-3 .1.1 /conf/settings .xml, line 278, column 18 [WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...< /activeProfiles >\n -->\n <activeProfile>... @278:18) @ /Users/flanliulf/ .m2 /settings .xml, line 278, column 18 [WARNING] [INFO] Scanning for projects... Downloading: http: //repo .maven.apache.org /maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata .xml Downloaded: http: //repo .maven.apache.org /maven2/org/apache/maven/plugins/maven-archetype-plugin/maven-metadata .xml (701 B at 0.3 KB /sec ) Downloading: http: //repo .maven.apache.org /maven2/org/apache/maven/plugins/maven-archetype-plugin/2 .2 /maven-archetype-plugin-2 .2.pom Downloaded: http: //repo .maven.apache.org /maven2/org/apache/maven/plugins/maven-archetype-plugin/2 .2 /maven-archetype-plugin-2 .2.pom (8 KB at 3.4 KB /sec ) ....(此处省略) Downloaded: http: //repo .maven.apache.org /maven2/org/apache/maven/archetypes/maven-archetype-quickstart/1 .0 /maven-archetype-quickstart-1 .0.pom (703 B at 1.1 KB /sec ) [INFO] ---------------------------------------------------------------------------- [INFO] Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.0 [INFO] ---------------------------------------------------------------------------- [INFO] Parameter: groupId, Value: com.oschina. test [INFO] Parameter: packageName, Value: com.oschina. test [INFO] Parameter: package, Value: com.oschina. test [INFO] Parameter: artifactId, Value: my-maven- test [INFO] Parameter: basedir, Value: /Users/flanliulf/maven-proj [INFO] Parameter: version, Value: 1.0-SNAPSHOT [INFO] project created from Old (1.x) Archetype in dir : /Users/flanliulf/maven-proj/my-maven-test [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time : 2:51.915s [INFO] Finished at: Thu Jan 23 14:59:17 CST 2014 [INFO] Final Memory: 9M /81M [INFO] ------------------------------------------------------------------------ |
当输出了“BUILD SUCCESS”时表示项目创建成功了,你会发现,生成的目标创建一个目录,并给出了artifactId的相同的名称。进入这个目录。
1
|
cd my-maven- test |
该项目的目录结构如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
my-maven-test |-- pom.xml `-- src |-- main | `-- java | `-- com | `-- oschina | `-- test | `-- App.java `-- test `-- java `-- com `-- oschina `-- test `-- AppTest.java |
在src/main/java目录中包含了项目的源代码,src/test/java目录中包含了项目的测试代码,pom.xml文件是该项目的项目对象模型(Project Object Model),通常称为POM文件。
POM
pom.xml文件是一个Maven项目的核心配置文件。它是包含了大部分你期望如何build一个项目所需信息的一个配置文件。POM比较庞大而且比较复杂,但是即使没有完全理解,我们也能够有效地使用它。该项目的POM如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< 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/maven-v4_0_0.xsd" > < modelVersion >4.0.0</ modelVersion > < groupId >com.oschina.test</ groupId > < artifactId >my-maven-test</ artifactId > < packaging >jar</ packaging > < version >1.0-SNAPSHOT</ version > < name >my-maven-test</ name > < url >http://maven.apache.org</ url > < dependencies > < dependency > < groupId >junit</ groupId > < artifactId >junit</ artifactId > < version >3.8.1</ version > < scope >test</ scope > </ dependency > </ dependencies > </ project > |
What did I just do?
你执行了Maven的目标(goal) archetype:generate,并添加了一系列的参数。前缀archetype是包含了目标的插件。如果你熟悉Ant ,你可以设想这类似于Ant中的任务(task)。这个目标创建了一个基于原型(archetype)的简单项目。我只想说,一个插件是一系列拥有共同目的(general common purpose)的目标的集合。例如,jboss-maven-plugin插件,其目的是“处理各种JBoss项目(deal with various jboss items)” 。
Build the Project
1
|
mvn package |
命令行中将打印编译时的各种信息,输出了“BUILD SUCCESS”时表示项目编译成功了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
[WARNING] [WARNING] Some problems were encountered while building the effective settings [WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...< /activeProfiles >\n -->\n <activeProfile>... @278:18) @ /usr/local/apache-maven-3 .1.1 /conf/settings .xml, line 278, column 18 [WARNING] Unrecognised tag: 'activeProfile' (position: START_TAG seen ...< /activeProfiles >\n -->\n <activeProfile>... @278:18) @ /Users/flanliulf/ .m2 /settings .xml, line 278, column 18 [WARNING] [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building my-maven- test 1.0-SNAPSHOT [INFO] ------------------------------------------------------------------------ Downloading: http: //repo .maven.apache.org /maven2/org/apache/maven/plugins/maven-resources-plugin/2 .6 /maven-resources-plugin-2 .6.pom Downloaded: http: //repo .maven.apache.org /maven2/org/apache/maven/plugins/maven-resources-plugin/2 .6 /maven-resources-plugin-2 .6.pom (8 KB at 1.0 KB /sec ) 。。。(省略) Downloaded: http: //repo .maven.apache.org /maven2/org/apache/maven/surefire/surefire-junit3/2 .12.4 /surefire-junit3-2 .12.4.jar (26 KB at 13.9 KB /sec ) ------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.oschina. test .AppTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ my-maven- test --- Downloading: http: //repo .maven.apache.org /maven2/org/apache/maven/maven-archiver/2 .5 /maven-archiver-2 .5.pom Downloaded: http: //repo .maven.apache.org /maven2/org/apache/maven/maven-archiver/2 .5 /maven-archiver-2 .5.pom (5 KB at 3.5 KB /sec ) 。。。(省略) Downloaded: http: //repo .maven.apache.org /maven2/org/codehaus/plexus/plexus-archiver/2 .1 /plexus-archiver-2 .1.jar (181 KB at 32.7 KB /sec ) [INFO] Building jar: /Users/flanliulf/maven-proj/my-maven-test/target/my-maven-test-1 .0-SNAPSHOT.jar [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time : 1:42.914s [INFO] Finished at: Thu Jan 23 15:41:20 CST 2014 [INFO] Final Memory: 11M /81M [INFO] ------------------------------------------------------------------------ |
不同于执行的第一个命令(archetype:generate),你可能会注意到第二个是简单的一个字 - package。这不是一个目标(goal),这是一个阶段(phase)。 一个阶段是一个构建的生命周期(build lifecycle)中的一步,一个构建的生命周期,可以看做是一系列阶段的有序集合。当指定了一个阶段时, Maven将顺序执行每个阶段。例如,如果我们执行编译(compile)阶段,实际被执行的各个阶段如下:
1
2
3
4
5
6
|
1.validate 2.generate-sources 3.process-sources 4.generate-resources 5.process-resources 6.compile |
你可以使用下面的命令来测试刚刚编辑和打包的jar:
1
|
java - cp target /my-maven-test-1 .0-SNAPSHOT.jar com.oschina. test .App |
将会得到如下输出:
1
|
Hello World! |
-
运行Maven工具
Maven常用阶段(phase)
虽然几乎没有一个完整的清单,但是下面列出了一些经常执行的默认生命周期(default)中的阶段。
-
validate: 验证项目是否正确,所有必须的信息是否可用。
-
compile: 编译项目的主源码,一般来说,是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
-
test: 使用单元测试框架对编译后的源码进行测试 , 测试代码不会被打包或部署。
-
package: 接受编译好的代码,打包成可发布的格式,如JAR。
-
integration-test: process and deploy the package if necessary into an environment where integration tests can be run
-
verify: run any checks to verify the package is valid and meets quality criteria
-
install: 将包安装到Maven本地仓库,供本地其他Maven项目使用。
-
deploy: 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。
还有值得注意的另外两个Maven的生命周期超出了上面的默认列表 ,它们是:
-
clean: 清理上一次构建生成的文件
-
site: 生成项目站点文档
阶段实际上被映射到底层的目标。每个阶段执行的具体目标依赖于项目的包装类型。例如,如果项目类型是一个JAR的话,package 执行 jar:jar ,而如果项目类型是 WAR 的话,执行的是 war:war。
注意的是,阶段(phase)和目标(goal)可以顺序执行。
1
|
mvn clean dependency:copy-dependencies package |
此命令将清理项目(clean the project),拷贝依赖(copy dependencies)和打包项目(package the project,即执行所有阶段来打包) 。
生成Site
1
|
mvn site |
此阶段根据项目的POM文件生成了一个site。你可以发现在target/site目录下生成了文档。
-
结论
这是一个非常简单的快速入门指南。如果想进一步深入理解相关内容,请参考 Maven Getting Started Guide。