首页 > 代码库 > maven使用说明

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。

maven使用说明