您的位置:首页 > 其它

[Maven教程]Maven初步探索

2016-03-24 10:30 211 查看
1. Maven简介

Apache Maven是一个软件项目管理和了解工具,它基于项目对象模型(POM)的概念,可以由一个核心信息块管理一个项目的构建、报告和文档。
Maven一词来源于依地语(犹太人用的国际语),含义是“知识的积蓄”。最早用于简化Jakarta Turbine项目的构建过程。这个项目包含了多个子项目,每个子项目都拥有自己独立的、存在明显差异的Ant构建文件,并且JAR文件都提交到了CVS上。项目人员想用一种标准的方法来构建这些项目,这种方法可以清晰地定义项目的构成,可以较容易地发布项目信息,还可以在多个项目之间共享JAR文件。于是一个可用于构建和管理任何Java项目的工具诞生了。
Maven的主要目标是让开发者在最短的时间内了解开发工作的完成状态。为了达到这个目标,Maven致力于以下几个方面:
1) 让构建过程变得简单
2) 提供一个统一的系统
3) 提供优质的项目信息
4) 提供最佳开发实践的指导

5) 允许透明迁移到新功能

2. 安装配置

我们可以从http://maven.apache.org/download.cgi获取Maven的最新版本。软件包有tar.gz和zip两种格式,请选择适合自己的软件包,并下载、解压到你的安装目录,如下图所示:





Maven的运行需要系统中预装JDK,因此请访问http://www.oracle.com/technetwork/java/javase/downloads/index.html下载、安装JDK并设置环境变量JAVA_HOME。需要注意的是,Maven对JDK的版本有一定要求,因此请仔细阅读Maven下载页的说明并安装符合需求的JDK版本。
添加MAVEN_HOME环境变量并指向Maven的安装目录,同时将安装目录下的bin目录添加到环境变量PATH。至此,Maven的安装工作基本完成。在命令行(或Linux终端)中输入"mvn -v",应该可以看到类似以下的信息:





3. 创建项目

在命令行(或Linux终端)中将当前目录切换至项目待创建的位置,而后使用如下命令来创建一个新的Maven项目:

mvn archetype:generate -DgroupId=cn.lazybug -DartifactId=lazybug
-Dversion=1.0 -DarchetypeArtifactId=maven-archetype-quickstart


archetypeAritifactId表示从maven-archetype-quickstart模板创建Java项目,如果不指定,那么在创建过程中将会列出一个相当长的清单让你选择。groupId表示组织标识(如cn.lazybug),artifactId表示项目标识(如lazybug),version则表示版本号。groupId、artifactId和version这三者构成Maven项目的唯一标识。

在创建过程执行完成后,你应该可以看到类似以下的信息:





创建好的Maven项目(基于maven-archetype-quickstart模板)的文件结构如下图所示:





src/main/java和src/test/java目录分别用来存放Java源代码文件和单元测试文件。此外还有一个重要的文件pom.xml,它位于项目的根目录。pom.xml描述了项目的完整信息,包括项目的组成、依赖关系、构建细节等。比如上例中创建的项目POM信息如下,除了声明groupId、artifactId、packaging、version等信息外,还表明依赖了junit,版本号是3.8.1。





4. 项目输出

使用maven-archetype-quickstart模板创建的项目会自动建立一个App.java文件(还有对应的测试文件),它包含一段输出"Hello World!"字符串的代码。现在我们开始尝试构建项目,并生成一个JAR文件。
在命令行(或Linux终端)中输入"mvn package"。当第一次运行时,Maven需要从远程库下载所需依赖并存放到本地库,因此请确保网络连接畅通。打包完成后,你将看到类似以下的信息:





项目输出的文件全部位于target目录。其中classes目录存放编译后的class文件,而test-classes目录存放编译后的测试文件,打包好的JAR文件则放在target目录。整体结构如下图:





我们可以通过"java -jar target\lazybug-1.0.jar cn.lazybug.App"来验证生成的包,执行结果如下:





在执行"mvn package"时,会自动运行测试文件目录中的junit测试用例,可以使用"mvn package -DskipTests"或"mvn package -Dmaven.test.skip=true"来跳过测试用例步骤。"-DskipTests"与"-Dmaven.test.skip=true"的区别是,前者不执行测试,但仍然会编译测试文件,而后者即不执行,也不编译。

5. 生命周期

在了解生命周期之前,我们先了解一下Maven的插件。插件是一个或多个目标的集合,目标则是一个明确的任务。插件和目标通常以pluginId:goalId的形式表示,比如上例中的archetype:generate,archetype表示插件,generate表示目标,这个目标的任务是生成一个基于模板的工程。还有其他的例子比如Compiler插件中的compiler目标,它用来编译项目中的源文件,或者Surefire插件中的test目标,它用来执行单元测试。
Maven的生命周期由一系列的有序阶段组成,每个阶段又绑定了多个插件目标。Maven支持多种不同的生命周期,如果没有进行额外的配置,那么它会使用默认生命周期。比如上例中的"mvn package",它将执行默认生命周期中package阶段及之前所有阶段的插件目标:

顺序阶段插件目标任务
1process-resourcesmaven-resources-plugin:resources复制文件到输出目录
2compilemaven-compile-plugin:compile编译代码
3process-test-resourcesmaven-resources-plugin:testRresources复制测试文件到输出目录
4test-compilemaven-compiler-plugin:testCompile编译测试代码
5testmaven-surefire-plugin:test执行单元测试
6packagemaven-jar-plugin:jar创建JAR包
7installmaven-install-plugin:install将输出安装到本地库
8deploymaven-deploy-plugin:deploy将输出布署到远程库
6. 依赖管理

在上例中,项目在POM中声明依赖了junit,第一次运行时Maven会查找远程库(默认是http://repo1.maven.org/maven2/)并自动下载所需的junit版本到本地库。本地库默认位于用户主目录的.m2目录,也可以通过安装目录下的conf/settings.xml文件来指定。
我们可以查看之前下载到本地库中的junit,它位于{用户目录}/.m2/repository/junit/junit/3.8.1,如下图所示:





可以看到目录中除了JAR文件外,还包括POM文件。如果POM中还声明了其他的依赖关系,那么Maven也会连同这些依赖一起下载。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  教程 入门 maven