首页 > 代码库 > maven学习笔记
maven学习笔记
maven是用来干嘛的
Maven是一个基于Java平台的项目构建工具。
设计的出发点:
在进行软件开发的过程中,无论什么项目,采用何种技术,使用何种编程语言,我们要重复相同的开发步骤:编码,编译,测试,生成文档,打包发布。实际上除了编写源代码,其他步骤完全是重复一些琐碎的工作,这些琐碎的工作就是构建。
那为什么让软件开发人员去重复这些工作?开发人员的主要任务应该是关注商业逻辑并去实现它,而不是把时间浪费在学习如何在不同的环境中去打包,发布,Maven正是为了将开发人员从这些重复性的任务中解脱出来而诞生的。
Maven的优点/能做什么?
Maven是由早期为Jakarta Turbine定制的构建工具发展而来的,现在成为了一个独立的软件项目管理工具。Maven的优点:
1)Maven抽象了一个完整的构建生命周期模型,帮助我们标准化构建过程,比如:编译,测试,打包等。这使得Maven成为一款优秀的构建工具。
2)Maven不仅仅是构建工具,还是一个依赖管理工具和项目信息管理工具。Maven提供了中央仓库,通过一个坐标,可以自动下载类库并解决依赖问题。此外,Maven对于项目目录结构、测试用例命名方式都有既定的规则,只要遵循这些成熟的规则,在项目间切换的时候就免去了额外的学习成本,可以说是约定优于配置。
How:如何使用Maven
1、前提条件
首先你需要了解如何在自己的电脑上安装软件,如果你不知道如何安装,请询问你办公室,学校里的人,或花钱找人来教你这个。 不建议给Maven的服务邮箱来发邮件寻求支持。
2、安装:
Maven是一个Java工具,所以你的电脑上必须安装了java。( 可在命令行键入java -version查看)
首先,下载Maven,按照安装说明进行操作。然后,在终端或在命令行中键入以下命令:
mvn –version
终端或命令行中应该打印出本机所安装的Maven的版本,例如:
Apache Maven 3.2.1 (ea8b2b07643dbb1b84b6d16e1f08391b666bc1e9; 2014-02-15T01:37:52+08:00)
Maven home: D:\apache-maven-3.2.1
Java version: 1.8.0, vendor: Oracle Corporation
Java home: D:\Program Files\Java\jdk1.8.0\jre
Default locale: zh_CN, platform encoding: GBK
OS name: “windows 8″, version: “6.2″, arch: “amd64″, family: “dos”
3、创建Maven项目
首先,创建存放项目的目录(例如d:\maven_proj或者/Users/xxx/maven_proj),打开终端或者命令行,进入该目录下,执行以下Maven命令:
mvn archetype:generate -DgroupId=org.flyne.demo -DartifactId=maven-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
如果是刚安装了Maven的,第一次运行可能需要一段时间。这是因为Maven正在从网上下载大部分最近的artifacts (plugin jars and other files)到你的本地仓库。可能需要执行几次该命令才能成功。这是因为在下载完成之前,远程服务器的连接可能超时。
当输出了“BUILD SUCCESS”时表示项目创建成功了,你会发现,archetype:generate创建了一个目录,该目录目录即Maven项目的根目录,目录名称同artifactId。进入这个目录:
cd maven-demo
在该目录下,你将会看到如下标准的maven项目结构:
maven-demo
|– pom.xml
`– src
|– main
| `– java
| `– org
| `– flyne
| `– demo
| `– App.java
`– test
`– java
`– org
`– flyne
`– demo
`– AppTest.java
在src/main/java目录中包含了项目的源代码,src/test/java目录中包含了项目的测试代码,pom.xml文件是该项目的项目对象模型(Project Object Model),又称为POM文件。
POM文件
pom.xml文件是一个Maven项目的核心配置文件,该配置文件包含了大部分的构建一个项目所需要的信息。POM比较庞大而且比较复杂,但是即使没有完全理解,我们也能够有效地使用它。该项目的POM如下:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 | < 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 >org.flyne.demo</ groupId > < artifactId >maven-demo</ artifactId > < packaging >jar</ packaging > < version >1.0-SNAPSHOT</ version > < name >maven-demo</ 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 > |
刚刚做了些什么?
刚刚我们执行了Maven的 archetype:generate目标(goal),并传入了多个参数。其中,前缀archetype是包含了目标的插件。如果你熟悉Ant ,你可以设想这类似于Ant中的任务(task)。这个目标(goal)创建了一个基于原型(archetype)的简单项目。一个插件是一系列拥有共同目的(general common purpose)的目标的集合。例如,jboss-maven-plugin插件,其目的是“处理各种JBoss项目(deal with various jboss items)” 。
构建(built)本项目
mvn package
命令行中将打印构建时的各种信息,结尾如下所示(输出了“BUILD SUCCESS”时表示项目构建成功)
[INFO] ——————————————————
[INFO] BUILD SUCCESS
[INFO] ——————————————————
[INFO] Total time: 3.086 s
[INFO] Finished at: 2014-04-08T12:46:13+08:00
[INFO] Final Memory: 13M/79M
[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/maven-demo-1.0-SNAPSHOT.jar org.flyne.demo.App
将会得到如下输出:Hello World!
4、运行Maven工具
Maven常用阶段(phase)
下面列出了的默认生命周期(default lifecycle)中一些经常执行的阶段。
- validate: 验证项目是否正确,所有必须的信息是否可用。
- compile: 编译项目的源码(生成maven-demo/target目录存放 .class文件)
- test: 使用单元测试框架对编译后的源码进行测试 , 测试代码不会被打包或部署。
- package: 接受编译好的代码,打包成可发布的格式,如JAR。
- verify: 运行任何检查,验证包是否有效且达到质量标准。
- install: 将包安装到Maven本地仓库,供本地其他Maven项目使用。
- deploy: 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。
还有值得注意的另外两个Maven的生命周期超出了上面的默认列表 ,它们是:
- clean: 清理上一次构建生成的文件
- site: 生成项目站点文档
这些阶段(phase)实际上被映射到底层的目标(goal)。每个阶段执行的具体目标依赖于项目的打包类型,例如,如果项目类型是一个JAR包的话,package 映射到的目标是 jar:jar ,而如果项目类型是 WAR 的话,执行的是 war:war。
注意的是,阶段(phase)和目标(goal)可以顺序执行,如:
mvn clean dependency:copy-dependencies package
这条命令将会清理项目(clean the project)、拷贝依赖(copy dependencies)并打包项目(package the project,即执行package之前的所有阶段来打包) 。
生成站点
mvn site
此阶段根据项目的POM文件生成了一个站点,你可以在target/site目录下看到生成的文档。
maven学习笔记