Maven实战之初识Maven

Maven实战之初识Maven

Maven的简单介绍

  1. 作用:Maven主要用于项目的构建,管理项目的依赖以及项目的信息(自动化构建、编译、单元测试、生成文档、打包、部署)
  2. 优势:相对于Ant、Make等,Maven抽象构建过程,提供构建任务的实现,自动化构建,有效地提高了开发效率,使开发人员可以集中精力在主要的开发任务上。而且Maven是跨平台工具,意味着在主流操作系统中,Maven都提供了对应的技术支持
  3. 使用注意:需要在JDK1.4及以上版本使用

Maven的安装

下载地址:Maven下载地址 ,选择最新版本的Binary文件即可,这里使用的是最新的apache-maven-3.3.9-bin.zip

Windows平台安装

  1. 首先将下载下来的Maven文件解压到一个文件中

  2. 然后配置环境变量(该步骤可省略,不过建议配上)

    1. 新建一个名为M2_HOME 的变量,其值为刚刚解压缩的maven文件,这里为E:\Program Files (x86)\apache-maven-3.3.9 如下所示
    1. ;%M2_HOME%/bin; 添加到PATH路径中,如下所示:

  3. 测试配置结果:

    打开CMD窗口,输入 mvn -version 如果上面的配置正确,则可以看到对应的输出信息,大致如下所示

Linux平台的配置

Linux平台的配置跟Windows平台的配置基本一致,只是将Maven文件加入Path路径的方式不同,这里就不做具体演示

Maven的简单配置

为了更好地使用Maven,这里对Maven进行简单的配置

拷贝settting.xml 文件

在刚刚解压的Maven文件中,在conf目录中有一个setting.xml,这是Maven的全局性设置文件,在该文件中的修改会影响到当前计算机的所有用户,一般情况下,推荐复制一份到家目录的的.me文件夹之下,windows的配置路径为C:\Users\xuhuanfeng\.m2

设置代理

由于某些原因,Maven使用过程中有时会出现无法连接到中央仓库的情况,这个时候可以尝试更换仓库地址,也可以选择设置代理,这里使用的是设置代理的方式,设置方式为在<proxies>中增加一个<proxy>,具体如下所示

<proxies>
   <proxy>
      <id>proxy</id><!--代理名称-->
      <active>true</active><!--选择该代理-->
      <protocol>http</protocol><!--代理协议-->
      <host>127.0.0.1</host><!--代理服务器地址-->
      <port>1080</port><!--代理端口-->
   </proxy>
</proxies>

Maven_HelloWorld

搭建完Maven平台之后,我们就开始我们的Maven学习之旅,首先肯定是久负盛名的HelloWorld项目了

  1. 新建一个文件夹,命名为HelloWorld作为我们项目的根目录
  2. 在HelloWorld目录下编写一个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>
      <!--Maven2 / Maven3 固定写法-->
      <groupId>cn.xuhuanfeng.maven</groupId>
      <!--groupId,可以近似当作公司/组织+项目名-->
      <artifactId>HelloWorld</artifactId>
      <!--artifactId,可以近似看做模块名称-->
      <version>1.0-SNAPSHOT</version>
      <!--当前版本号-->
      <name>Maven_HelloWorld</name>
      <!--项目的名称,可以省略-->
 </project>   
 
  1. 在 HelloWorld文件中,创建对应的Java类,对应的包路径为 src/main/java/cn/xuhuanfeng/maven/HelloWorld.java,内容如下
package cn.xuhuanfeng.maven;
/**
*  Maven HelloWorld项目
*/
public class HelloWorld{

    public String  sayHello(){
        return "Maven_HelloWorld";
    }

  1. 使用CMD窗口进入到项目的根目录,也就是HelloWorld目录下,执行mvn clean compile,输入内容如下

从上图中可以看到,HelloWorld项目已经编译成功了,其中的部分细节内容,后续将补上,这里可以暂时先不在意

在HelloWorld目录中,会自动生成target目录,其中有一个名为classes文件夹,编译好的class文件就存放在这里,类路径跟包名一一对应,如下所示:

编写测试用例

这里我们为HelloWorld.java编写对应的单元测试,并且交给Maven由其进行自动的测试

  1. 引入Junit依赖,在pom.xml文件中,project元素下增加Junit依赖,代码如下:
<dependencies>
 <dependency>
     <!--引入Junit依赖-->
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.7</version>
     <scope>test</scope>
 </dependency>
</dependencies>

  1. 编写测试类,在 HelloWorld文件中,创建对应的Java类,对应的包路径为 src/test/java/cn/xuhuanfeng/maven/HelloWorldTest.java,内容如下
package cn.xuhuanfeng.maven;

import static org.junit.Assert.assertEquals;
import org.junit.Test;

/**
*  测试HelloWorld
*/
public class HelloWorldTest{

    @Test
    public void testHelloWorld(){
        HelloWorld helloWorld = new HelloWorld();
        String result = helloWorld.sayHello();
        assertEquals("Maven_HelloWorld",result);
    }

}
  1. 运行测试用例,执行命令为mvn clean test, 对应的结果如下所示:

从上图中可以看到,在执行test之前,会对整个项目先进行compile,从而保证始终得到最新版本的class文件,并且,从图中可以看到,Maven自动帮我们 运行测试样例,并且返回样例的结果。

文件路径说明

Maven会自动编译src/main/java目录下的文件,并且编译,运行src/test/java目录下的测试样例,这也是我们将路径命名如下的原因,同时,将测试代码以及主代码分开也是一种比较好的做法。

自动生成项目骨架

在上面中,我们手动编写了一个基本的Maven项目,包括了配置pom.xml,HelloWorld.java以及对应的测试类,可能你会感觉到实际上使用Maven很麻烦,确实,如果按照上面那种做法,很繁琐,所以Maven为我们提供了另一种机制,可以通过配置archetype来生成对应的项目骨架,不过,由于这里只是简单的入门,所以我们直接使用Maven提供的archetype即可,通过命令mvn archetype:generate 就可以快速地生成一个项目的骨架,具体过程如下所示:

中间会有很多内容,主要是Maven从中央仓库中拉取相关的信息,这里省略

然后可以看到熟悉的内容,只需要在这里填入对应的groupId,artifactId,version,package等信息即可

最后生成的项目结果图如下所示:

并且包含了Junit依赖以及一个简单的测试样式,是不是很方便?

总结

在这一小节中,我们了解了关于Maven的一些基本知识,手动创建了一个Maven例子,HelloWorld,并为其编写测试样例,通过Maven的构建插件以及测试插件,自动完成编译、测试的工作,最后通过Maven的自动构建工具,构建一个简单的项目骨架,Maven的学习之路还在继续。

本节中主要用到的命令为

 mvn clean compile
 mvn clean test
 mvn archetype:generate
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,629评论 18 139
  • 1.编写POM Maven项目的核心文件是pom.xml,POM(Project Objcet Model)项目对...
    zlcook阅读 5,900评论 7 26
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,773评论 6 342
  • 1 一次偶然,与久别许久的弟弟风太相遇。圆平庸的生活开始每天被记录下来。真的很平庸,以至于...
    chapter1v1阅读 406评论 0 0
  • 前言:培训,留下了什么? 在很长一段时间里,只要我出差,都会有人问我: “你又去培训啊?” 我都会很自然地告诉对方...
    王佐佑阅读 572评论 0 2