maven入门:一个简单的maven项目

3 篇文章 0 订阅

简介

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_home\apache-maven-3.2.5。
3.配置maven环境变量:

3.1系统变量:M2_HOME,值:D:\maven_home\apache-maven-3.2.5\

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

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



5.搭建maven环境时遇到的问题:
当搭建完maven环境后,运行命令:mvn -v,报错:


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

手动创建一个maven项目

maven环境搭建完以后,我们现在全手动来搭建一个maven项目,直观感受一下maven命令。
1.手动创建一个目录,用于存放我们的开发项目。这里我自己创建目录为:D:\maven_home\projects\,在此目录下放我们的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.3 TestHelloMaven.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.4 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.realla</groupId>
  <artifactId>maven_part1</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>maven_part1</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  
</project>

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

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

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

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

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

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

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

2.建完上面的路径和java文件后,使用cmd,进入文件夹:d:\maven_home\projects\maven_part1,进行命令操作。
2.1 执行命令:maven compile,会在maven_part1路径下,会生成target文件夹,target中包含对应java文件的class文件,以及编译结果说明文件:


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


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


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


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

对于maven命令:”maven package”,是在当前项目路径下生成一个项目的jar包,如果不做其他操作,本地的其他模块不能引用此jar包;”maven install”命令,则将项目jar包发布到我们的本地仓库中,那么我们本地的其他模块,只要在pom.xml中定义相关的<dependency>标签值,就可以调用此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.2 Hello.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.3 TestHello.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配置如下:
<?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.invocation</groupId>
  <artifactId>maven_part2</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>maven_part2</name>
  <url>http://maven.apache.org</url>
  <dependencies>
	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.10</version>
		<scope>test</scope>
	</dependency>
    <dependency>
      <groupId>com.realla</groupId>
      <artifactId>maven_part1</artifactId>
      <version>1.0-SNAPSHOT</version>
	  <!-- <scope>test</scope> 不能要-->
    </dependency>
  </dependencies>
  
</project>
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文件的<dependency>标签多加了一个属性<scope>test</scope>(上面的注释部分),当设置了此属性后,这个包只在测试时有效,而我的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





  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值