文档章节

5分钟 maven3 快速入门指南

fanl1982
 fanl1982
发布于 2014/01/23 14:37
字数 2128
阅读 10963
收藏 89
  • 前提条件

    你首先需要了解如何在电脑上安装软件。如果你不知道如何做到这一点,请询问你办公室,学校里的人,或花钱找人来解释这个给你。 不建议给Maven的服务邮箱来发邮件寻求支持。

  • 安装Maven

    Maven是基于java的工具,所以你的电脑上必须安装了java环境。

    首先,下载Maven和按照安装说明进行操作。然后,在终端或在命令行中键入以下命令:

mvn --version

   终端或命令行中应该打印出本机所安装的Maven的版本,如下:

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环境,格式应该类似这样:

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命令:

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)到你的本地仓库。可能需要执行几次该命令才能成功。这是因为在下载完成之前,远程服务器的连接可能超时。

    输出的命令行可能类似:

[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的相同的名称。进入这个目录。

cd my-maven-test

    该项目的目录结构如下:

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如下:

<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   
mvn package

    命令行中将打印编译时的各种信息,输出了“BUILD SUCCESS”时表示项目编译成功了。

[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.validate
2.generate-sources
3.process-sources
4.generate-resources
5.process-resources
6.compile

    你可以使用下面的命令来测试刚刚编辑和打包的jar:

java -cp target/my-maven-test-1.0-SNAPSHOT.jar com.oschina.test.App

    将会得到如下输出:

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)可以顺序执行。

mvn clean dependency:copy-dependencies package

    此命令将清理项目(clean the project),拷贝依赖(copy dependencies)和打包项目(package the project,即执行所有阶段来打包) 。

    生成Site
mvn site

    此阶段根据项目的POM文件生成了一个site。你可以发现在target/site目录下生成了文档。

  • 结论

   这是一个非常简单的快速入门指南。如果想进一步深入理解相关内容,请参考 Maven Getting Started Guide


© 著作权归作者所有

fanl1982
粉丝 6
博文 5
码字总数 12384
作品 0
武汉
项目经理
私信 提问
加载中

评论(6)

fanl1982
fanl1982 博主

引用来自“一只小桃子”的评论

一直搞不懂这个是干嘛用的 和ant一样吗? 又不是没有eclipse,干嘛要这么复杂

简单的一点,当项目引入很多开源jar包时,这些jar包之间会有互相依赖,光是版本冲突就够头疼了
马马来
马马来
Maven学习网站推荐: http://www.douban.com/note/329641425/
labelKey
labelKey
@一只小桃子 项目管理构建工具。
一只小桃子
一只小桃子
一直搞不懂这个是干嘛用的 和ant一样吗? 又不是没有eclipse,干嘛要这么复杂
八戒_o
八戒_o
学习,谢谢楼主了。
黄勇
黄勇
写的很好!赞一个!补充一篇《Maven 那点事儿》:http://my.oschina.net/huangyong/blog/194583,欢迎交流。
安装maven及eclipse中安装maven插件

maven不仅是项目构建工具,还是一个功能强大的项目管理工具。 大多数的开源项目都是用maven来够建的。如果想更多的了解maven,可以参考: Maven入门指南(一) 和 Maven入门指南(二)。 一:...

孟飞阳
2016/06/28
77
0
如何快速学习 CSS Grid 布局 - 相关资源和教程推荐

本文首发于:www.css88.com/archives/86… 这篇文章是 CSS Grid 布局有用的资源和教程,帮你快速了解相关知识。同时还比较了 CSS Grid 、 Flexbox 、 Table 布局之间的区别,及适用情况。 CS...

愚人码头
2018/10/29
0
0
《maven官方文档》5分钟开始Maven

原文地址 前提 你必须明白如何在电脑上安装软件。如果你不知道如何做,请向你学校、办公室里等的人请教下,或者付费给他人让他们解释给你。Maven邮件组不是寻求这个建议的最好地方。 安装 Ma...

GarfieldEr007
2018/01/14
0
0
总有你要的编程书单(GitHub )

目录 IDE IntelliJ IDEA 简体中文专题教程 MySQL 21分钟MySQL入门教程 MySQL索引背后的数据结构及算法原理 NoSQL Disque 使用教程 Neo4j .rb 中文資源 Redis 命令参考 Redis 设计与实现 The ...

汇智网
2017/11/22
0
0
free-programming-books-zh.md

语言无关MySQL NoSQL PostgreSQL Web WEB服务器 其它 函数式概念 分布式系统 在线教育 大数据 操作系统 数据库 智能系统 正则表达式 版本控制 程序员杂谈 管理和监控 编程艺术 编译原理 编辑...

银月光海
2016/05/20
124
0

没有更多内容

加载失败,请刷新页面

加载更多

Java常见异常处理

异常是Java程序中经常遇到的问题,一个异常就是一个Bug,就要花很多时间来定位异常。 Java异常 (1)Throwable是Java异常的顶级类,所有的异常都继承于这个类。 (2)Error,Exception是异常...

daxiongdi
17分钟前
2
0
Validator 常用注解

说明 Validator主要是校验用户提交的数据的合理性的,比如是否为空了,密码长度是否大于6位,是否是纯数字的,等等。那么在spring boot怎么使用这么强大的校验框架呢。 常用 [@null](https:...

五彩的颜色
26分钟前
2
0
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。

#1 先把入栈顺序的第一数据入栈, #2 if 入栈的数据==等于出栈的数据,就循环一次看是否新建的栈的数据是否出栈 #3 返回新建的栈是否为空,就是要的结果 public class Solution { public boo...

winkwink
32分钟前
1
0
《JAVA核心知识》学习笔记 (19. 数据库)

19.1.1. 存储引擎 19.1.1.1. 概念 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、 更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧...

Shingfi
38分钟前
4
0
三分钟手操自己的yum源

本文章原创首发公众号:编程三分钟 上次就想手操yum源了,考虑到有的朋友没接触过,直接写成了yum源的科普,活活憋了我一个星期,现在我们快快开始。 什么情况下我们需要搭建一个仓库呢? 记...

编程三分钟
42分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部