一起学Maven(初识Maven)<一>

开场白

    在现在的项目开发过程中,越来越重视项目的管理,而且主流的项目管理框架或者说是工具已经慢慢被Maven取代,在求职者面试过程中,项目开发过程中,Maven的使用已经成为主流,如何很快着手Maven的项目管理,已经成为包括我在内的很多程序员考虑的问题,在本系列博文中,我将以一个初识Maven的角度和大家共同学习Maven的项目构建工具的使用,在这个过程中,有可能有很多问题,也或许有很多我没有考虑到的地方,还请高手给予指正,当然,如果是新入手的学者,也可以在实验过程中给出想法和建议,在此感激不尽。下面进入Maven的学习之路。

什么是Maven?

    Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。类似于大家熟知的Ant工具所起到的效果,当然他们之间存在很多异同点。

为什么要学Maven?

    大家会发现,在平时项目中,我们每天有相当一部分时间花在了编译、运行单元测试、生成文档、打包和部署等烦琐且不起眼的工作上,如果你使用Ant,会发现很多东西都要程序员去定义,去编写build文件,然而有了Maven这个构建工具,能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。我们不需要也不应该一遍又一遍地输入命令,一次又一次地点击鼠标,或者小心翼翼的写着配置文件,我们要做的是使用Maven配置好项目,然后输入简单的命令(如mvn clean install),Maven会帮我们处理那些烦琐的任务。这一切都体现了一句经典“约定优于配置”,当然Maven不仅是构建工具,还是一个依赖管理工具和项目信息管理工具,况且Maven也是跨平台的。这些都会通过实例说明。

获取和安装

    下载地址:http://maven.apache.org/download.cgi,进去之后,会发现有很多版本,我们将使用较新的版本apache-maven-3.1.1-bin.zip,  (windows平台)如图1所示:

一起学Maven(初识Maven)<一>

      图1

    如果想查看源码可以下载src版本,当然也可以选择其他操作系统,比如linux平台下的文件,本系列只介绍windows平台下,其他平台还请参照其他博文讲解。

找到下载后的文件,并将文件解压到一个自己定义的目录,如图2所示:

一起学Maven(初识Maven)<一>

                  图2

    此时发现有四个目录,下面讲解四个目录中文件的作用

    bin目录:

    该目录包含了mvn运行的脚本,这些脚本用来配置java命令,准备好classpath和相关的java系统属性,然后执行java命令

    boot目录:

    该目录只包含一个文件,该文件为plexus-classworlds-xxx.jar。plexus-classworlds是一个类加载器框架,相对于默认的java类加载器,它提供了更丰富的语法以方便配置,maven使用该框架加载自己的类库。

    conf目录:

    该目录包含了一个非常重要的文件settings.xml。直接修改该文件,就能在机器上全局地定制maven的行为。一般情况下,我们更偏向于复制该文件至~/.m2/目录下(~表示用户目录),然后修改该文件,在用户范围定制maven的行为。

    lib目录:

    该目录包含了所有maven运行时需要的java类库。

环境变量的配置

    打开系统属性(桌面上右键单击“我的电脑”→“属性”),点击高级系统设置,再点击环境变量,在系统变量中新建一个变量,变量名为M2_HOME,变量值为Maven的安装目录E:\StudySoftware\javaEE\apache-maven-3.1.1(根据自己安装的情况)。点击确定,接着在系统变量中找到一个名为Path的变量,在变量值的末尾加上%M2_HOME%\bin;,注意多个值之间需要有分号隔开,然后点击确定。至此,环境变量设置完成,详细情况如图3所示:

一起学Maven(初识Maven)<一>

                           图3

    下面将查看配置是否正确,打开命令控制台,输入mvn -v如果发现图4所示的信息,配置就是成功的:

一起学Maven(初识Maven)<一>

                        图4

    至此,Maven的环境变量配置成功。

本地仓库

由于运行过mvn命令,那么会在用户目录下发现一个.m2文件,如图5所示:

一起学Maven(初识Maven)<一>
                       图5
    其中repository目录,这个目录是存放从网上下载下来的jar,而这些jar就是maven的好处之一,可以自动下载项目中用到的jar包,而这些jar包的存放位置就是一个仓库,存放在本地的就是本地仓库,而存放在网络上的就是maven的*仓库。

    由于下载jar文件的增多,会给C盘造成负担,或者在重装系统后,c盘的东西将不复存在,因此可以把repository目录转移到其他盘中储存。

具体做法是:

1. 复制repository目录到其它盘符,本文中是在E:\Workspaces\Maven下

2. 复制刚刚解压好的Maven目录中,conf中的settings.xml文件到E:\Workspaces\Maven目录下,

3. 打开找到如下内容

<localRepository>....</localRepository>
改成:

<localRepository>E:/Workspaces/Maven/repository</localRepository>

同样将conf下的settings.xml也改成如上配置,如图6所示:

一起学Maven(初识Maven)<一>

                       图6

保存.完成.

这样就将本地仓库从C:\Users\Steven\.m2\repository移到了E:\Workspaces\Maven\repository中。

Maven小实例

本文在目录E:\Workspaces\STSWorkspace\Maven_01(可以随便找个目录)下,新建pom.xml文件,然后在其中加入如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<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.steven.maven</groupId>
    <artifactId>maven_01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</project>
其中

    groupId:

    项目或者组织的唯一标志,并且配置时生成路径也是由此生成,如com.steven.maven生成的相对路径为:/com/steven/maven
    artifactId:

    项目的通用名称
    version:

    项目的版本
    接下来在此文件夹中建立src文件夹,然后在src中建立main和test文件夹,然后在main中建立java文件夹,然后在java文件夹中建立com/steven/maven/HelloWorld.java文件,如图7所示:

一起学Maven(初识Maven)<一>

                         图7

HelloWorld.java的内容如下:

package com.steven.maven;

public class HelloWorld{
	public void sayHello(){
		System.out.println("Hello Maven!");
	}
}
然后在命令控制台中执行mvn compile,如图8所示:

一起学Maven(初识Maven)<一>
                          图8

    会发现出现Downloading下载的提示,这是因为,Maven在执行命令的时候,要加载其他使用到的插件和其他jar包,称为依赖,这个时候就要从网络上进行下载,所以如何使用Maven,请保持网络是正常的,否则会出现问题。当编译完成的时候出现成功的提示信息,如图9所示:

一起学Maven(初识Maven)<一>

                      图9

此时发现项目目录中多了一个target的目录,如图10所示:

一起学Maven(初识Maven)<一>

                     图10

    发现刚刚编译产生的class文件放在了target目录下,所以只要我们按照这个目录格式编写,maven工具就帮助我们执行出结果,然后放在相应的结构目录下。

    下面我们将继续编写测试代码,在test目录下新建java文件夹,然后同样新建com/steven/maven/HelloWorldTest.java文件,其中HelloWorldTest文件的内容如下:

package com.steven.maven;
import org.junit.*;
public class HelloWorldTest{
	@Test
	public void sayHelloTest(){
		HelloWorld hw = new HelloWorld();
		hw.sayHello();
	}
}

此时的目录结构如图11所示:

一起学Maven(初识Maven)<一>

                       图11

然后控制台执行mvn test命令,但此时出现错误信息,如图12所示:

一起学Maven(初识Maven)<一>

                      图12

这是因为测试过程中用到了junit的包,但没有找到,原来的解决办法是:

  • 通过将junit的包加入到环境变量下即可解决

但maven的解决思路是

  • 在pom.xml中加入<dependencies>节点,完成的配置文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<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.steven.maven</groupId>
    <artifactId>maven_01</artifactId>
    <version>0.0.1-SNAPSHOT</version>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
		</dependency>
	</dependencies>
</project>
    <dependencies>节点代表项目依赖的jar包,然后加入junit的jar包配置文件即可,此时再次执行mvn test,会发现如图13所示的结果:

一起学Maven(初识Maven)<一>
                       图13

    这时候maven从网络上下载4.10版本的junit jar包,最后的执行结果如图14所示:

一起学Maven(初识Maven)<一>

                      图14

    此时发现测试成功,正确执行Hello Maven!的结果。

    此时再来看target中的文件会发现如图15所示的结果:

一起学Maven(初识Maven)<一>

                      图15

    如果此时执行mvn clean命令,如图16所示:

一起学Maven(初识Maven)<一>

                      图16

    会发现在下载相应插件的同时,执行了清除target目录的操作,然后再来看Maven_01目录中的文件,如图17所示:

一起学Maven(初识Maven)<一>

                          图17

发现target目录已经不存在了,即被maven clean命令清空了。如果接着执行maven test,会发现target目录又出现了。

    这个时候再来观察一下一开始配置的本地仓库中的文件,会发现图18的结果:

一起学Maven(初识Maven)<一>

                           图18

我们发现,Maven在执行命令的过程中用到的jar都已经在本地仓库中储藏了,至此,Maven小实例结束。

总结

    在本节中,通过Maven的介绍,下载,安装,配置,已经小实例的实现,估计大家也多多少少有些头绪了,通过实例,可以看出Maven可以作为项目的构建工具,而配置文件很好写,而且写的很少,用到的jar包,不需要手动去添加到环境变量中,只要通过配置,Maven就会通过网络寻找到并且下载到本地仓库中。

    在本节中用到的Maven命令:

    mvn compile编译java文件

    mvn test执行junit操作

    mvn clean清空target目录操作

    在此恭祝大家学习愉快!

一起学Maven(初识Maven)<一>

上一篇:poj 3308 Paratroopers


下一篇:Linux命令详解之find