简介

Maven是一个用于项目管理的工具,其好处是为我们管理jar包的依赖版本,同时也方便的组合我们自己的代码模块。在入门前有两个概念先简单介绍一下,一个是坐标,另一个是仓库。

坐标:maven为每一个jar包或模块都定义了一个坐标,坐标代表了一个特定jar包及版本。坐标定义在项目的pom.xml文件中,有三个重要标签:groupId、artifactId、version,其他模块调用可以通过在自己的pom.xml中引用此坐标,从而引用此jar包的功能(就像eclipse中导入jar的功能一样)。

仓库:maven提供了一个仓库,仓库管理着项目所需要的jar包,所有本地项目指向这个仓库,从仓库中获取jar依赖。仓库有两个层级,一个是本地仓库,另一个是maven的中央仓库。本地仓库在maven首次使用时自动创建,windows默认路径是~/.m/repository/,在linux中默认路径是${user_home}/.m/repository/,这个路径是可以自定义的,后面再说;中央仓库是一个maven远程仓库,管理着几乎所有的开源jar包。当我们使用maven工具,或者编译项目依赖时,maven首先从本地仓库需找jar依赖,如果本地仓库没有对应的jar包,则从中央仓库下载需要的插件和jar包到本地仓库,若有其他本地项目再需引用同样的jar包,则直接可从本地仓库获取依赖。

现在不多说mavne的理论概念,我们先来上手写个入门例子。创建一个maven项目有三种方式:

1.直接手动构建路径,pom.xml,及java文件;

2.用maven命令来自动生成一个maven结构的项目;

3.用eclipse来创建一个maven项目。

这里我们从零开始,用方式1,手动创建一个maven项目。

maven环境搭建

1.下载maven,下载地址: http://maven.apache.org。

2.下载为一个zip压缩包,将此压缩包拷贝至自定义路径下,这里我放入d:maven_home下,并解压缩,得到maven路径为:D:maven_homeapache-maven-3.2.5。

3.配置maven环境变量:

3.1系统变量:M2_HOME,值:D:maven_homeapache-maven-3.2.5

3.2 系统变量:Path,修改值,行首添加:%M2_HOME%in;

4.测试maven安装结果,使用命令:mvn–v。输出结果:

5.搭建maven环境时遇到的问题:

当搭建完maven环境后,运行命令:mvn -v,报错:

后来检查配置,发现我本地的环境变量JAVA_HOME=C:ProgramFilesJavajdk1.5.0_11。根据maven的官方说明,maven3.2支持java6及以上,maven3.0、maven3.1支持java5及以上。所以修改JAVA_HOME为C:ProgramFilesJavajdk1.6.0_43,在执行maven命令,结果正常。

手动创建一个maven项目

maven环境搭建完以后,我们现在全手动来搭建一个maven项目,直观感受一下maven命令。

1.手动创建一个目录,用于存放我们的开发项目。这里我自己创建目录为:D:maven_homeprojects,在此目录下放我们的maven项目。我们创建第一个项目maven_part1,及此项目下的文件夹、文件。

1.1 结构如下:

这里maven_part1就相当于我们的项目模块名,src与pom.xml文件同级,main与test分别存放我们的项目资源和对应的测试资源。这是一个maven项目固定的结构,如果结构不对可能造成maven项目编译找不到资源的错误。

1.2 HelloMaven.java代码:

package com.realla;

public class HelloMaven{

public String sayHello(String name){

return "Hello:"+name;

}

}

1.3TestHelloMaven.java代码:

package com.realla;

import org.junit.*;

import static org.junit.Assert.*;

public class TestHelloMaven{

@Test

public void testHelloMaven(){

HelloMaven hm = new HelloMaven();

String str = hm.sayHello("maven");

assertEquals(str,"Hello:maven");

}

}

1.4pom.xml文件:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

com.realla

maven_part1

jar

1.0-SNAPSHOT

maven_part1

http://maven.apache.org

junit

junit

4.10

test

Pom.xml文件是maven项目的重要配置文件,这里先做一个简单说明:

Pom.xml的根节点是,在文件的开头与很多xml的配置文件一样,需要自己的schema定义,从现成的pom.xml中拷贝即可。其中有几个重要标签:

:组ID,指一个项目的名称,命名规范为:部门+项目名。

:模块的名称。一个项目中可能有多个模块,这些模块各自进行开发,所以其命名规范就是我们的模块名。

:版本号。一般为1.0-SNAPSHOT,代表开发阶段的快照。

:开发后,打包的方式。这里是打包成jar文件,也可以设置成war。

:dependency配置的是我们项目所依赖的jar文件。与我们自己的项目一样,每个jar文件都有三个坐标标签、、。这三个标签值决定了一个jar包。当我们在项目中定义了所有依赖jar的这些属性后,在编译时,项目会先从本地仓库中寻找已有的jar依赖,如果没有,在向maven的中央仓库寻找并下载所需的jar依赖。的这几个属性如何配置,可访问中央仓库(http://mvnrepository.com/),搜索需要的jar包,网页可以显示此jar依赖所需要的配置语句,直接拷贝过来即可。本例子中,因为测试时需要依赖junit包,所以dependency中需要配置对此包的引用。

2.建完上面的路径和java文件后,使用cmd,进入文件夹:d:maven_homeprojectsmaven_part1,进行命令操作。

2.1执行命令:maven compile,会在maven_part1路径下,会生成target文件夹,target中包含对应java文件的class文件,以及编译结果说明文件:

2.2然后执行命令:maven test,maven会显示测试结果,如果测试正确,会显示如下:

此时target目录中还会生成测试结果文件。

2.3执行命令:maven package,将我们项目打包成jar文件。(此项是根据我们pom.xml中标签的配置来生成对应的包文件,我们这里配置是jar)。生成jar文件在target路径下:

2.4执行命令:maven install,将我们的jar包发布到本地仓库,供其他模块、其他开发者调用:

简单说明:maven管理项目的一个重要功能是管理我们项目依赖的jar包,这里有一个重要概念是仓库。当我们用标签配置了我们项目需要的jar包以后,编译期间,maven会先从本地仓库中获取依赖,如果本地仓库中没有此依赖,则会转向maven的中央仓库下载相应的jar依赖。本地仓库是由maven配置管理的。

对于maven命令:”maven package”,是在当前项目路径下生成一个项目的jar包,如果不做其他操作,本地的其他模块不能引用此jar包;”maven install”命令,则将项目jar包发布到我们的本地仓库中,那么我们本地的其他模块,只要在pom.xml中定义相关的标签值,就可以调用此jar包了。

2.5此时的maven_part1是一个maven格式的项目,其不能导入eclipse。若果需要导入eclipse中,我们还需要执行命令:mvn eclipse:eclipse。执行结果:

3 在创建一个maven项目:maven_part2,测试maven_part2如何引用maven_part1定义的类。

3.1在projects目录下新建一个maven项目:maven_part2。(该项目的目的是为了调用maven_part1中的HelloMaven.sayHello()方法。)项目结构如下:

3.2Hello.java对象中包含了对maven_part1中HelloMaven.java的引用,代码如下:

package com.invocation;

import com.realla.HelloMaven;

public class Hello{

public String sayInvocation(String name){

//调用maven_part1中的HelloMaven类

HelloMaven hm = new HelloMaven();

return hm.sayHello(name);

}

}

3.3TestHello.java代码如下:

package com.invocation;

import org.junit.*;

import static org.junit.Assert.*;

public class TestHello{

@Test

public void testSayInvocation(){

Hello hello = new Hello();

String str = hello.sayInvocation("maven");

assertEquals(str,"Hello:maven");

}

}

3.4对应的pom.xml配置如下:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

4.0.0

com.invocation

maven_part2

jar

1.0-SNAPSHOT

maven_part2

http://maven.apache.org

junit

junit

4.10

test

com.realla

maven_part1

1.0-SNAPSHOT

3.5 说明

maven_part2引用maven_part1,前提是在maven_part1项目中,我们已经正确编译,且执行mvn install命令,将maven_part1项目打包成jar,发布到本地仓库中了。所以本地的其他项目就可以调用此项目的jar包。这里maven_part2的pom.xml中定义dependency,指定了maven_part1的三个坐标,因此可获得对应的依赖。这里可以看出,maven很方便的管理我们的项目,包括jar包版本、项目模块组合等。如果一个公司有10多个项目,项目间的大部分jar包时重复的,我们就不需要在每个项目的lib中保存自己的jar包。取而代之,maven将这些依赖放在本地仓库中,所有的项目都指向本地仓库,从此仓库中获取依赖,以及获取对应的jar包版本。而且协作开发的模块,通过maven自动打包发布,也很容易互相配合使用。

编译maven_part2,结果正确:

3.6 遇到的问题

刚开始,我对maven_part2编译时报错,说com.realla.HelloMaven对象找不到,原因是maven_part2的pom.xml文件的标签多加了一个属性test(上面的注释部分),当设置了此属性后,这个包只在测试时有效,而我的HelloMaven对象是在我的main路径中的Hello.java中引用的,很明显这不是一个测试路径,所以会报错;

然后我将scope删掉,然后还报错,说org.junit不存在,原因是maven_part2中的pom.xml文件我没有配置junit依赖,配置完后,编译正常。

用maven命令来创建项目

这里需要用到命令:mvn archetype:generate。

这里的archetype是一个插件,generate是目标的(goal),此命令时maven调用archetype插件执行generate目标。

此命令可以直接使用,那么在命令执行时,会有一系列操作。其中会让开发者输入项目的坐标(groupId、archetypeId、packaging、version)

当然,也可以在命令后面指定参数,直接定义项目坐标:

Mvn archetype:generate -DgroupId=com.realla.command -DartifactId=maven_part3 -Dpackaging=com.realla.command -Dversion=0.0.1-SNAPSHOT

在执行命令时,就不必在指定项目坐标。执行结果:

生成项目如下,然后我们可以在此基础上修改:

用eclipse创建maven项目

1.如果我们的当前使用的工具是一个老版本的eclipse,那么我们需要下载安装maven插件m2eclipse。

2.我这里用的是myeclipse10,其中已经集成了maven插件。但我们需要修改两个地方:一是将maven插件替换为我们自己安装的maven(就好像myeclipse集成了tomcat,但我们还是比较喜欢指定使用自己安装的tomcat一样);另一个是指定本地仓库的位置。

修改myeclipse使用指定maven:

Window/preferences/Myeclipse/Maven4MyEclipse/Installations,点击add,添加指定的maven路径:

修改本地仓库的路径,首先修改本地%M2_HOME%/conf/settings.xml中的本地仓库的位置,然后让Myeclipse指向此settings.xml配置文件即可:

Window/preferences/MyEclipse/Maven4MyEclipse/userSettings

至此,MyEclipse的maven配置完成,可以创建maven项目了:

右键/new/other》选择Maven Project》next》next》选择archetype(一般选:maven-archetype-quickstart;如果是创建web项目,则选:maven-archetype-webapp)》next》定义项目坐标》finish。完成创建。下图则是我创建的maven_part4项目结构:

好了,用myeclipse创建一个quickstart maven项目就完成了。

至于具体在myeclipse中如何操作配置maven项目,可以参考链接(转):http://b-l-east.iteye.com/blog/1246482

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。