【Maven由浅入深】1.maven初体验

Maven是目前用的最多的一个项目管理工具,它是Apache的一个开源工具。
下载最新的Maven组件可以到Apache的Maven官网下载:maven.apache.org。左侧找到Download选项下载最新的Maven包。


第一步,我们先下载Maven和配置环境变量

我们下载apache-maven-3.3.1-bin.zip这个版本,下载之后发现只有7.79M


如何安装呢?很简单,我们将安装目录设在D盘下,先把apache-maven-3.3.1-bin.zip压缩包拷贝到D盘下,然后解压(压缩包可删除可不删除)。

之后将我们的maven的安装路径拷贝到环境变量中:
新建一个M2_HOME,将Maven安装路径拷贝到下面
D:\apache-maven-3.3.1-bin\apache-maven-3.3.1


然后把maven文件夹的bin路径放置在path的变量值下:

我们现在就把Maven安装好了。我们启动控制台,使用命令提示符来操作Maven:
我们使用mvn -v指令就可以观察我们安装的maven的版本信息:

可以看到我们的maven版本信息,jdk版本,windows版本。

第二步,我们创建maven工程文件夹和pom配置文件:
我们现在自己平常使用的工作盘创建一个Maven工程文件夹(名为maven-mm01),然后创建一个名为pom.xml的XML文件:


我们写一下XML的标准头:
<?xml version="1.0" encoding="UTF-8"?>

然后加入Maven的文件头:
<?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>  
  
</project>

xmlns与xsi什么的都是Schema文件,是用来约束XML的写法的(这点在XML中有详细阐述)

接下来我们在<project></project>标签对中写maven配置的常用标签:
1.<groupId>…</groupId>
一般写组织名称,团体名称,项目名称

2.<artifactId>…</artifactId>
表示这一个项目的某一个具体模块

3.<version>…</version>
项目的版本

所以我们首先创建了这样一个pom文件:
<?xml  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>cn.edu.hpu.maven</groupId>
  <artifactId>maven-mm01</artifactId>
  <version>0.0.1-SNAPSHOP</version>
</project> 

第三步,我们按照Maven的格式将maven文件夹完善:
在我们之前pom.xml所在的maven-mm01文件夹下创建一个src目录,用于存放源代码,然后我们创建两个文件夹main和test,然后我们在main文件夹中创建java文件夹,之后在其中创建一个HelloMaven.java文件,内容如下:
package cn.edu.hpu.maven;

public class HelloMaven
{
	public String sayHello(String name){
		return "hello:"+name;
	} 
}

然后创建cn/edu/hpu/maven文件夹,将HeloMaven.java文件放进去(要符合package的路径)

接下来我们在控制台中进入这个路径:

然后我们输入maven compile指令去编译Maven工程:

可以看到屏幕在不停的滚动,这是因为maven仅仅只是一个很小的工具,但是我们在操作的时候,它会根据我们的需求,从网络中下载它所需要的一些依赖、插件。下载完之后它会存在开发者电脑的某一个位置中。

看到这里我们就编译成功了maven


我们回到我们的maven-mm01文件夹中,发现我们多了一个target文件夹,里面有一个编译好的classes文件夹,里面有编译好的我们的HelloMaven.class。

按照这样的结构我们将类写完,它就会自动将这个类通过pom.xml配置文件的规范将其编译。

接下来我们继续在test中写,我们在test中创建一个java文件夹,里面创建cn/edu/hpu/maven文件夹,其中写一个TestHelloMaven.java文件:
package cn.edu.hpu.maven;
import org.junit.*;
import static org.junit.Assert.*;

public class TestHelloMaven
{
	public void testSayHello(){
		HelloMaven hm=new HelloMaven();
		String str=hm.sayHello("maven");
		assertEquals(str,"hello:maven");
	} 
}
其中assertEquals(str,"hello:maven");方法是junit4的断言方法,测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法),assertEquals断言两个对象相等,若不满足,方法抛出带有相应信息的错误。

我们可以看到,我们使用了junit的包,如果直接编译TestHelloMaven.java的话会报错:

说明我们导入的junit根本不知道这个包在哪(原来我们的jdk是有环境变量的,所以能够找到)
所以就要用到我们maven的特性了,我们在pom加入以下配置(junit的):
<?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>cn.edu.hpu.maven</groupId>
  <artifactId>maven-mm01</artifactId>
  <version>0.0.1-SNAPSHOP</version>
  
  <dependencies>
      <dependency>
	          <groupId>junit</groupId>
		  <artifactId>junit</artifactId>
		  <version>4.10</version>
	  </dependency>
  </dependencies>
  
</project> 

我们再次进行编译:

发现不再报错!我们运行的测试结果也没有错误。

我们没有引入任何的jar包,没有将jar包导入classpath中,但是我们用maven的pom.xml中加入以上配置,就神奇的将我们的jar包放入到了classpath中。也利用这个jar包有效的将我们的代码编译。

这就是maven给我们的最直观的好处。我们只要把我们的项目放到maven要求的目录中,它就会自动根据pom文件来对我们的项目进行编译、测试、发布等操作。

有了maven,我们的一些繁琐的工作可以用maven全部自动完成。假设我们项目组使用了svn、github等版本控制工具,新来的员工从版本控制器上下载完工程之后,想让项目在自己的机器上跑起来,还需要配置tomcat服务器等乱七八糟的东西,但是有了maven,我们将项目从版本控制器上下载下来之后,它就会将项目自动打包发布到tomcat上,一切过程全部省去,这就是自动化的构建工具。

刚才我们使用了两个命令:
mvn compile自动编译指令,编译成功之后,会将我们的编译文件放在target/classes中。
mvn test自动测试指令,会生成3个测试报告,放在surefire-reports文件夹下,通过测试报告可以看到我们的测试结果。


我们还有一个命令,mvn clean,会将我们之前的编译状态清空,删除target文件夹。

另外一个命令,mvn package,它会将我们的工程编译、测试,然后运行package,最后它会将我们的项目打包成jar包:

我们创建第二个测试项目,将原来的项目直接拷过来,改一下名字为maven-mm02,然后修改一下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>cn.edu.hpu.maven</groupId>
  <artifactId>maven-mm02</artifactId>
  <version>0.0.1-SNAPSHOP</version>
  
  <dependencies>
      <dependency>
	          <groupId>junit</groupId>
		  <artifactId>junit</artifactId>
		  <version>4.10</version>
		  <scope>test</scope>
	  </dependency>
  </dependencies>
  
</project> 

我们的源代码在src中,我们的测试代码在test中,java文件在java文件夹中(这里是规范,不然maven无法自动编译)。

我们在main中创建一个java文件夹,里面创建cn/edu/hpu/maven/mm02文件夹,其中写一个Hello.java文件:
package cn.edu.hpu.maven.mm02;
import cn.edu.hpu.maven.HelloMaven;


public class Hello
{
	public String say(String name){
		HelloMaven hm = new HelloMaven();
        return hm.sayHello(name);		
	}
}

我们用指令mvn compile来编译这个java文件,发现找不到HelloMaven这个类:


我们就又要发挥我们的pom.xml的作用了,我们在dependencies中加入<groupId>cn.edu.hpu.maven</groupId>:
<?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>cn.edu.hpu.maven</groupId>
  <artifactId>maven-mm02</artifactId>
  <version>0.0.1-SNAPSHOP</version>
  
  <dependencies>
      <dependency>
	      <groupId>junit</groupId>
		  <artifactId>junit</artifactId>
		  <version>4.10</version>
		  <scope>test</scope>
	  </dependency>
	  <dependency>
	      <groupId>cn.edu.hpu.maven</groupId>
		  <artifactId>maven-mm01</artifactId>
		  <version>0.0.1-SNAPSHOP</version>
	  </dependency>
  </dependencies>
  
</project>

我们执行mvn compile,发现它报找不到jar包的错误:


原因是缺少maven-mm01工程的jar包,那么我们就把这个jar包引入。这时,我们回到maven-mm01项目,在其上运行mvn install指令:

安装完成之后,我们回到maven-mm02,这个时候其实jar包已经安装进来了(原因和仓库有关,这个jar包是mm01工程上传至仓库,然后mm02从仓库中取得mm01的jar包。关于仓库后面会有解释):
就是maven-mm01-0.0.1-SNAPSHOP.jar
运行mvn compile指令:

发现通过了!
而且已经编译成功:


我们同样只是在pom中写了上述的配置,就有效的完成了Hello的编译。这就是maven给我们的最大的帮助,我们可以把项目分成各个模块,我们把上个模块做好,将来各个项目需要这个模块的时候,在pom.xml中将这个模块引进进来,就可以直接用了。这是一个很好的醒目管理理念。

可以看到我们的大部分项目的模块都是重复的,我们使用maven就不用引入jar包,编译测试发布都不用我们操心。

对于maven,我们的这些操作都放在什么地方呢?我们的maven的这些jar包都是从哪里引进过来的呢?下面就引入了一个核心的概念,就是“仓库”。

我们下载下来的maven只是一个几M的工具,当我们用的时候,它就会去“仓库”中去寻找我们所需要的jar文件和仓库文件。当我们安装好maven后,“仓库”就会默认安装在windows系统(我用的是Win7)的C:/Users/${user.home}/.m2/repository路径中:

我们打开repository文件夹,发现我们之前在pom中配置的依赖jar包和插件全部都在这里:


其实我们可以通过maven安装文件中conf文件夹下的settings.xml来配置本地仓库:
<localRepository>/path/to/local/repo</localRepository>

当我们执行mvn compile指令的时候,它就会根据pom文件的dependencies来找到我们可能依赖的jar包,它发现如果这个jar包存在,它就会在仓库中将这个jar包引入至我们的工程,如果没有该jar包,maven就直接从网络中下载下来(下载都是在mvnrespitory.com这个网络中央仓库中取得)。

我们刚刚的mvn install指令,就会将我们的工程打包成jar包放入我们的“仓库”中。

我们下次来说一下安装maven的一些注意事项。


转载请注明出处:http://blog.csdn.net/acmman/article/details/50612410

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光仔December

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值