maven是一个优秀的跨平台项目构建工具。项目构建上文也提到,包括项目的创建、编译、测试、打包、部署等。maven不仅仅是一个构建工具,它还是一个依赖管理工具和项目信息管理工具。依赖简单理解就是项目用到的第三方jar包。我们用到了什么jar包,就说对这个jar包有依赖。项目信息包括项目名称、描述、项目地址、开发人员信息、用到的scm信息、持续集成信息等。
要使用maven,首先得安装。现在的IDE一般默认都内置maven的支持,比如eclipse。但是内置的maven一般比较新,可能不是太稳定,推荐使用自己安装的maven。
安装步骤:
1、安装jdk。maven运行需要用到jdk,因此首先需要安装jdk。
2、下载。maven官方下载地址:http://maven.apache.org/download.cgi
3、安装。下载完后是一个压缩包,解压缩即可。解压完后目录结构如下所示:
其中bin目录包含maven的可执行命令,boot目录包含一个负责创建maven运行所需的类装载器的jar文件,conf目录包含maven的全局配置文件,lib目录包含maven运行时依赖的jar文件;
4、配置环境变量。将maven的bin目录添加到PATH环境变量中,将maven的安装目录添加到M2_HOME环境变量中。
安装完以后,就能在命令行中使用maven了。打开一个命令行终端,输入命令mvn
接下来可以手动创建一个maven项目。在指定目录下新建一个目录,比如hello-world,即项目名,在hello-world下新建src目录,在src目录下新建main目录,在main目录下新建java目录,在java目录下可以新建包com\jiangnan\helloworld,按层次依次创建com、jiangnan、helloworld目录,在helloworld目录下新建一个类HelloWorld:
package com.jiangnan.helloworld; public class HelloWorld { public String sayHello() { return "hello maven"; } public static void main(String[] args) { System.out.println(new HelloWorld().sayHello()); } }
在hello-world目录下新建pom.xml,文件内容如下:
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.jiangnan</groupId> <artifactId>hello-world</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>hello-world</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.7</version> <scope>test</scope> </dependency> </dependencies> </project>
命令行进入hello-world目录,输入mvn clean compile,可以看出命令行在不断输出,如果看到BUILD SUCCESS,就说明命令执行成功了,如果看到BUILD FAILURE,则要查看失败原因。这里仅仅是演示命令行中使用maven,我们平时开发一般会在IDE中集成maven。
IDE中集成maven:
这里以eclipse为例,打开eclipse,Window->Preference->Maven->Installations,可以看到默认勾选的是EMBEDDED,去掉这个勾,点击add,选中解压后的maven安装目录,勾上自定义安装的maven,点击Apply,这样maven就集成到eclipse中了。
默认情况下,maven的全局配置文件是在用户家目录下的.m2目录下的settings.xml文件,如果是Windows系统,一般是在c盘用户目录下。默认的本地仓库位于家目录下的repository目录下。Windows系统一般是在c盘,由于会占用c盘空间,而且重装系统的时候可能不注意会格式化,因此我喜欢使用自定义的全局配置文件。打开maven安装目录下conf目录下的settings.xml文件,将localRepository元素的值修改为自定义的路径,作为本地仓库路径,maven下载的构建会存放于此,关于仓库的概念,后续会介绍。
在eclipse中,Maven->user settings,user settings选择刚才编辑的文件,会看到下面列出了我们刚才配置的本地仓库的路径,点击Apply,OK,这样maven就配置完了。
新建maven项目:
新建项目一般会选择maven的archetype来生成项目的骨架。项目的骨架就是指项目的基本结构,比如普通项目结构,会有一个项目名,根目录下有src目录,如果是web项目,还会有WEB-INF目录,lib目录,或者web.xml等,而maven的archetype就是用来帮我们生成这些目录和文件的,不同的archetype生成的目录结构也不一样。
在eclipse中新建maven项目,File->New->Other->Maven->Maven Project,Next,Next,接下来列出了maven默认提供的archetype
对于普通项目,我们一般会选择maven-archetype-quickstart,对于web项目,选择maven-archetype-webapp;接下来填写groupId,artifactId,version,这三个是maven的坐标,将在下一章详细介绍
点击finish,maven项目就建好了。项目结构大致如下所示:
convension over configuration(约定大于配置)
我们之前也说过,传统项目,项目结构比较混乱,配置文件、测试代码存放位置不统一,maven基于很多实践经验,对于项目做了一些基本的约定,我们只要遵守这些约定就可以了,比如:
1、项目的根目录下有一个pom.xml,用于配置maven的依赖、插件等信息,我们后面会详细阐述
2、根目录下有一个src目录,src目录下分main和test目录,main目录下放置主代码相关的东西,以后会发布到生产;test目录下放置测试相关东西,如单元测试、测试配置文件等,这些东西只在测试时使用,不会发布到生产环境;main、test目录下又分java和resources目录,这里将代码和配置文件分开了,java目录存放代码,而resources目录存放配置文件,这样的项目结构就清晰多了;
3、项目的编译输出默认在项目根目录下的target目录下。
除此以外,maven还有其他的约定,后面涉及的时候再介绍。
通过maven创建的项目,使用maven的约定,我们看到其他项目的时候,都是我们熟悉的结构,不在需要花时间去熟悉。当然,这是maven默认的行为,如果想改变这种行为,也是可以的,只不过不推荐,后面我们会讲述如何改变默认的行为。
接下来我们要阐述maven的几个核心概念,如坐标、依赖、仓库、插件等。