[Maven教程]Maven入门

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教程]Maven入门_第1张图片

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",应该可以看到类似以下的信息:

[Maven教程]Maven入门_第2张图片


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入门_第3张图片

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

[Maven教程]Maven入门_第4张图片

其中,Java源代码存放在src/main/java目录,测试代码存放在src/test/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教程]Maven入门_第5张图片

项目输出的文件位于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阶段及之前所有阶段的插件目标:

顺序 阶段 插件目标 任务
1 process-resources maven-resources-plugin:resources 复制文件到输出目录
2 compile maven-compile-plugin:compile 编译代码
3 process-test-resources maven-resources-plugin:testRresources 复制测试文件到输出目录
4 test-compile maven-compiler-plugin:testCompile 编译测试代码
5 test maven-surefire-plugin:test 执行单元测试
6 package maven-jar-plugin:jar 创建JAR包
7 install maven-install-plugin:install 将输出安装到本地库
8 deploy maven-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,教程)