【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

时间: 2024-09-24 04:59:21

【Maven由浅入深】1.maven初体验的相关文章

【Maven由浅入深】3.在Eclipse中创建maven工程

紧接着上一篇,下面我们来学习如何在Eclispe(MyEclipse)中创建Maven工程. 如果我们使用的是光秃秃的eclipse(最原始的),那么我们要为eclipse下载一个插件,即是m2eclipse 我使用的是MyEclipse8.5版本,其中已经安装好了Maven插件. 打开我们的MyEclipse,我们点击Windows选项,然后选择Preferences选项,然后我们可以看到里面有一个Maven选项: 这是Myeclipse直接给我们的Maven,这个Maven我们是不能直接使用

新手RoR十分钟初体验Step By Step

http://yulimin.javaeye.com/blog/35929 关键字: rails   Ruby Rails RoR     新手RoR十分钟初体验Step By Step 声明一下,这是个新手启动的体验文章,高手不要看了...:) 1.安装RubyWindows用户去 http://rubyforge.org/ 的 http://rubyforge.org/projects/rubyinstaller/ 下载 One-Click Installer - Windows 安装即可,

MyBatis入门初体验之使用大全(2)_java

MyBatis简介 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. iBATIS一词来源于"internet"和"abatis"的组合,是一个基于Java的持久层框架.iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO) 1.所需jar包

XenApp / XenDesktop 7.6 初体验一 安装, 配置站点和序列号服务

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://beanxyz.blog.51cto.com/5570417/1579558 最新的Xen Desktop/Xenapp 已经到7.6的版本了.豆子自己搭建了个实验环境练练手. 虚拟平台我使用的是ESXi 5.5,OS都是windows 2012R2,之前我已经设置了Vcenter,DC和SQL 服务器.可以说准备工作基本上都好了.登录 Citrix.com,下载试用版的ISO镜

初体验JBossESB 及 部署使用 Hello World QuickStart

http://yulimin.javaeye.com/blog/52980 关键字:   ESB SOA     初体验JBossESB 及 部署使用 Hello World QuickStart1.下载 JBoss 4.0.5 GA 及 JBossESB 4.0 CR2 并解压,如果是src包的话,进入JBossESB目录运行ant install %JBoss_HOME% : C:/OpenSource/JBoss/4.0 %JBossESB_HOME% : C:/OpenSource/JB

zephir-(2)安装和初体验

zephir-安装和初体验 前言 先在这里感谢各位zephir开源技术提供者 zephir主要是解决了PHP开发人员尝试编写和编译PHP拓展所能执行的代码的语言.这是一个支持动态/静态类型的语言,熟悉PHP开发人员可以很好的进行开发.zephir这个名字的主要来源是(Zend Engine/PHP/Intermediate),今天首先介绍zephir的安装,接着会对zephir进行一些语法上面的介绍,希望大家喜欢! 注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术 附上: 喵了个

php+jquery+ajax初体验

这个一个简单的php与ajax案例 仅供新手学习 附上效果图 jquery ajax代码  $(function(){   $("#send").click(function(){    var cont = $("input").serialize();    $.ajax({     url:'aseoe.php',     type:'post',     dataType:'json',     data:cont,     success:function

Fireworks MX 之初体验1-2

在编者的苦口婆心,盛情邀请下,风云设计 的两位高手 风筝 和 心动为谁 终于答应,为广大朋友奉献对 Fireworks MX 的亲密接触后带来的初体验,为喜爱 Fireworks 的 fans 们作出贡献,特此鸣谢! Optimize of FW4 Optimize of FWMX 通过比较,我们发现FWMX中Optimize面板比起FW4中的内容要丰富多了,包括弹出菜单选项,其实通过观察,我们可以清楚的看到,现在的Optimize面板其实是将FW4中的Optimize面板和Color面板整合到

Fireworks MX 之初体验1-1

在编者的苦口婆心,盛情邀请下,风云设计 的两位高手 风筝 和 心动为谁 终于答应,为广大朋友奉献对 Fireworks MX 的亲密接触后带来的初体验,为喜爱 Fireworks 的 fans 们作出贡献,特此鸣谢! Fireworks MX 初体验 正如好多"专家"预料的那样,Fireworks Mx(Beta)[以后简称FWMX]终于在5月份左的时候出现了.估计刚刚拿到测试版的朋友们的心情肯定和我是一样的--激动得很.并且对她充满无限憧憬.我现在倒是真的很想知道各位在安装后,然后真

Fireworks MX 之初体验2-1

在编者的苦口婆心,盛情邀请下,风云设计 的两位高手 风筝 和 心动为谁 终于答应,为广大朋友奉献对 Fireworks MX 的亲密接触后带来的初体验,为喜爱 Fireworks 的 fans 们作出贡献,特此鸣谢! 优化菜单面面观 上节我们对FWMX的最新.最酷(好像我很能落伍一样,总用老掉牙的词汇~)的各种新面板做了一个简单的介绍和了解,不知道各位是不是已经拿到了FWMX的测试版本开始体验了,相信体验的感觉总的来说应该是美妙的.本节我们来一起看看FWMX的各级菜单及其相关命令.同样,我们仍然