maven

1.Maven简介

1.1 Maven是什么

在学习Maven之前,我们先来看一下我们现在做的项目都有哪些问题。假设你现在做了一个crm的系统,项目中肯定要用到一些jar包,比如说mybatis,log4j,JUnit等,除了这些之外,你有可能用到你的同事开发的其他的东西,比如说别人做了一个财务模块或做了一个结算的模块,你在这里边有可能要用到这些东西。

假如有一天你们的项目中mybatis进行了一个升级,但是它内部使用的JUnit没有升级,你升级以后的mybatis假如要用5.0的JUnit,而你项目中目前用的是4.0的,会不会冲突?必然会出问题!这个时候管理起来会比较麻烦,你需要各种调整。更有甚者,假如同事做的这些东西升级了但又没有通知你,这个时候,就会出现几种严重的问题:

(1)jar包不统一,jar包不兼容

(2)工程升级维护过程操作繁琐

除此之外,还会有其它的一系列问题。那么要解决这些问题,就用到了我们今天要讲的Maven了。 那Maven是什么

Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)

Maven是用Java语言编写的。他管理的东西统统以面向对象的形式进行设计,最终他把一个项目看成一个对象,而这个对象叫做POM(project object model),即项目对象模型

 

我们说一个项目就是一个对象,作为对象的行为、对象的属性都有哪些呢?

Maven说我们需要编写一个pom.xml文件,Maven通过加载这个配置文件就可以知道我们项目的相关信息了!到这里我们知道了Maven离不开一个叫pom.xml的文件。因为这个文件代表就一个项目。

提个问题大家思考,如果我们做8个项目,对应的是1个文件,还是8个文件?肯定是8个!

那Maven是如何帮我们进行项目资源管理的呢?这就需要用到Maven中的第二个东西依赖管理。这也是它的第二个核心!

所谓依赖管理就是maven对项目所有依赖资源的一种管理,它和项目之间是一种双向关系,即当我们做项目的时候maven的依赖管理可以帮助你去管理你所需要的其他资源,当其他的项目需要依赖我们项目的时候,maven也会把我们的项目当作一种资源去进行管理,这就是一种双向关系。

那maven的依赖管理它管理的这些资源存在哪儿呢?主要有三个位置:本地仓库,私服,中央仓库

本地仓库顾名思义就是存储在本地的一种资源仓库,如果本地仓库中没有相关资源,可以去私服上获取,私服也是一个资源仓库,只不过不在本地,是一种远程仓库,如果私服上也没有相关资源,可以去中央仓库去获取,中央仓库也是一种远程仓库。

Maven除了帮我们管理项目资源之外还能帮助我们对项目进行构建,管理项目的整个生命周期,当然它的这些功能需要使用一些相关的插件来完成当然整个生命周期过程中插件是需要配合使用的,单独一个无法完成完整的生命周期。

插件能干什么呢?它最终会给我们产生构建出来的结果,比如说可能是一个jar包,也可能是一块源代码等等

注意:maven包含的只有中间蓝色框的部分,外围的东西都是maven之外的东西,都是可以换的,而中间的部分都是maven的核心,此时还能分成两部分,虚线上面这部分是我们对一个项目的操作的过程中对应的内容,虚线下面这部分实际上maven已经帮我们做好了,做好了无数的插件,帮我们完成整个过程

1.2 Maven的作用

Maven的作用我们可以分成三类:

(1)项目构建:提供标准的,跨平台的自动化构建项目的方式

(2)依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突等问题

(3)统一开发结构:提供标准的,统一的项目开发结构,如下图所示:

 

 

各目录存放资源类型说明:

src/main/java项目java源码

src/main/resources项目的相关配置文件(比如mybatis配置,xml映射配置,自定义配置文件等)

src/main/webappweb资源(比如html,css,js等)

src/test/java:测试代码

src/test/resources:测试相关配置文件

src/pom.xml:项目pom文件

2.Maven环境搭建

maven的官网:http://maven.apache.org/

2.1 下载

官方下载地址:http://maven.apache.org/download.cgi

 

2 安装

maven是一个绿色软件,解压即安装,非常容易,

我们找到今日课程资料中的安装程序,将里面的apache-maven-3.6.1-bin.zip直接解压到D盘根目录下即可

解压完成后我们可以查看一下maven自己的一个目录结构如下

 

 

各目录结构说明:

bin:可执行程序目录,

boot:maven自身的启动加载器

conf:maven配置文件的存放目录

lib:maven运行所需库的存放目录

2.3 环境配置

maven的运行需要java的环境,需要我们配置JAVA_HOME环境变量,这个相信大家已经存在了

下面在去配置MAVEN_HOME的环境变量

1:我的电脑-------->属性--------->高级系统设置---------->新建系统变量MAVEN_HOME

系统变量值就是maven软件的根目录,我们刚刚已经将maven解压到D盘了,因此变量值就如图中所示

2:环境变量配置好之后需要测试环境配置结果,我们需要在DOS命令窗口下输入以下命令查看输出

mvn -v

 

如果能够看到输出的maven的版本信息代表配置成功

3.Maven基础概念

3.1 仓库

仓库:用于存储资源,主要是各种jar包

 

关于仓库,我们前面讲到了有三种:本地仓库,私服,中央仓库,其中私服和中央仓库都属于远程仓库

中央仓库maven团队自身维护的仓库,属于开源的

私服各公司/部门等小范围内存储资源的仓库,私服也可以从中央仓库获取资源

本地仓库开发者自己电脑上存储资源的仓库,也可从远程仓库获取资源

私服的作用:

(1)保存具有版权的资源,包含购买或自主研发的jar

(2)一定范围内共享资源,能做到仅对内不对外开放

3.2 坐标

坐标是给maven使用的,maven就根据你的坐标到本地仓库里去寻找对应的jar包,以前我们怎么做的?你自己去找jar包,然后把它拷贝到我们的项目里面去,以后的话就不需要了,让maven去帮你做这件事

我们说maven的仓库里存储了各种各样的资源(jar包),那这些资源我们如何找到它们呢?我们需要知道它们具体的一个位置才能知道如何找到它们,这个就叫坐标

坐标maven中的坐标用于描述仓库中资源的位置

https://repo1.maven.org/maven2/

那maven中的坐标是如何构成的呢?

maven坐标的主要组成如下:

groupId:定义当前资源隶属组织名称(通常是域名反写,如:org.mybatis;com.itheima)

artifactId:定义当前资源的名称(通常是项目或模块名称,如:crm,sms)

version:定义当前资源的版本号

packaging:定义资源的打包方式,取值一般有如下三种

(1)jar:该资源打成jar包,默认是jar

(2)war:该资源打成war包

(3)pom:该资源是一个父资源(表明使用maven分模块管理),打包时只生成一个pom.xml不生成jar或其他包结构

如果要查询maven某一个资源的坐标,我们通常可以去maven的仓库进行查询,

https://mvnrepository.com/在该网站中可直接搜索想要的资源,然后就能得到该资源的坐标

输入资源名称进行检索

 

点击你想要的资源进行查看

 

选择版本查看坐标

 

maven坐标的作用:

使用唯一标识,唯一性定义资源位置,通过该标识可以将资源的识别与下载工作交由机器完成。

3.3 本地仓库配置

开发者要在自己电脑上做开发,首先要做的就是配置本地仓库

默认情况下maven本地仓库的位置在哪儿呢?

我们可以选择在全局进行配置,在maven的配置文件conf/settings.xml中可以找到它的说明

  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->

也就是在系统盘当前用户目录下的.m2/repository,比如我当前的系统用户是zs,则默认的本地仓库仓库位置在`C:\Users\zs.m2\repository`

因为我们平时开发项目所有的资源会比较多,而且各种资源还有好多的版本,资源与资源之间还有相互依赖的这种情况,因此本地仓库保存的内容会非常的多,它的体积会很大,如果放在C盘下不太合适,因此我们可以自己来指定一个位置作为本地仓库的位置,这个指定同样是需要来修改maven的配置文件`conf/settings.xml`

在我们前面查看这个文件的时候大家会发现它提供了一个标签<localRepository>/path/to/local/repo</localRepository>

这个标签中配置的值就是我们本地仓库的位置,但是这个标签是在注释中的,也就是说目前不起作用,因此我们要将该标签挪出注释,并修改标签内的值,指定一个新的位置作为本地仓库的位置,例如

 <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
<localRepository>D:\maven-repository</localRepository>

 

 

 另外大家需要注意:maven默认连接的远程仓库位置是:(即中央仓库)

此站点并不在国内,因此有时候下载速度非常慢,因此我们可以配置一个国内站点镜像,可用于加速下载资源

我们在conf/settings.xml配置文件中找到<mirrors>标签,在这组标签下添加镜像的配置,如下

<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

  

 

4.Maven项目搭建

我们回顾一下maven规范的目录结构:

4.1 手动搭建maven项目

我们先使用手动的方式来创建maven项目

(1)在D盘下创建目录mvnproject并进入该目录,作为我们的操作目录

(2)创建我们的maven项目,创建一个目录project-java作为我们的项目文件夹,并进入到该目录

(3)创建java代码(源代码)所在目录,即创建src/main/java

(4)创建配置文件所在目录,即创建src/main/resources

(5)创建测试源代码所在目录,即创建src/test/java

(6)创建测试存放配置文件存放目录,即src/test/resources

(7)在src/main/java中创建一个包(注意在windos文件夹下就是创建目录)com/itheima,在该目录下创建Demo.java文件,作为演示所需java程序,内容如下

package com.itheima;
​
public class Demo{
    public String say(String name){
        System.out.println("hello "+name);
        return "hello "+name;
    }
}

(8)在src/test/java中创建一个测试包(目录)com/itheima,在该包下创建测试程序DemoTest.java

package com.itheima;
​
import org.junit.*;
public class DemoTest{
    
    @Test
    public void testSay(){
        Demo d = new Demo();
        String ret = d.say("maven");
        Assert.assertEquals("hello maven",ret);
    }
    
}

(9)在project-java/src下创建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.itheima</groupId>
    <artifactId>project-java</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
​
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>
​
</project>

通过前面的操作,我们已经搭建好了maven的项目结构,下面要通过maven来构建我们的项目

maven的构建命令以mvn开头,后面添加功能参数,可以一次性执行多个命令,用空格分离

mvn compile:编译

mvn clean:清理

上述两个命令是构建命令

mvn test:测试

mvn package:打包

mvn install:安装到本地仓库

下面我们来进行操作:

(1)在项目project-java所在的DOS命令窗口下执行mvn compile进行源码编译,当然首次执行需要先下载,下载什么东西呢?是我们执行这个compile功能对应的相关插件

 

编辑结果如下:  

编译完成后在项目project-java下多了一个目录target,在这个目录下就存放的是maven编译好的一些东西

 

我们可以进入到target目录查看  

 

其中生成的classes目录就是编译好的字节码文件

(2)当然如果我们想清理掉这些东西,我们只需执行mvn clean命令即可,清理掉后target目录也就消失了

(3)如果我们要执行测试包中的测试程序,我们只需执行mvn test命令即可

 

此时在看target目录会多一些东西

 

其中产生的test-classes就是测试代码的字节码文件,surefire-reports是它产生的测试报告

 

(4)使用mvn package命令进行打包,如下

 

在生成的target目录中可以看到打包的结果

 

当然,如果仔细看DOS窗口输出的我们会发现,mvn package命令的时候maven会把前面两个命令mvn compile,mvn test都执行一遍,当然打包只打包源程序

(5)使用mvn install命令进行安装,将项目打好的包存入本地仓库

 

 

仔细查看输出会发现mvn install命令执行的时候也会将前面的命令都执行一遍

此时我们可以去本地仓库中查找,如何查找?这个很重要

maven是按照groupId/artifactId/version的结构在本地仓库进行存储

前面我们是通过手动的方式创建的maven项目,相对来说比较的麻烦,maven本身也是这样觉得的,因此maven本身就给我们提供了相关的插件来帮助我们快速构建项目,当然这是一些命令:

 

这些命令不用记,因为实际操作的时候也用不着,因为实际开发的时候我们基本都是用过一些IDE工具来进行项目开发,这些IDE工具基本都集成了Maven,我们操作起来非常简单。  

4.2 IDEA工具搭建maven项目

前面学习的基本都是通过命令来构建和管理项目,但是这在实际开发过程中基本不常用,常用的是通过相关IDE工具来进行项目的构建和管理,因此我们使用IDEA工具进行maven项目的搭建

需要注意的是:Maven和IDEA在版本上存在一些兼容性问题,因为要合理的选择Maven和IDEA的版本,本课程中提供安装maven-3.6.1版本是可用的

4.2.1 不使用原型创建项目

(1)在IDEA中配置Maven

 (2)创建maven工程

(3)填写本项目的坐标

 

 (4)查看各目录颜色标记是否正确

有两个地方可以查看修改目录颜色,这是第一种:在创建项目的时候

 

 

这是第二种:在项目创建好之后,在文件目录上进行修改

 

(5)IDEA右侧有一个maven管理界面,可点开查看,Lifecycle是构建项目的生命周期

还有就是注意:我们在依赖资源完之后,一定要在maven管理界面进行一个刷新,才能将我们依赖的资源加进来

还有就是注意:我们写好代码之后,只能说明我们的maven项目就绪了,并没有构建我们的maven项目,那怎么进行构建呢,maven管理界面就提供了我们之前讲的项目构建命令

 

(6)在项目的pom.xml文件中添加项目资源依赖

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

 (7)创建源代码:com.itheima.Demo

package com.itheima;

/**
 * Created by 传智播客*黑马程序员.
 */
public class Demo{
    public String say(String name){
        System.out.println("hello "+name);
        return "hello "+name;
    }
}

(8)创建测试代码:com.itheima.DemoTest

package com.itheima;

import org.junit.Assert;
import org.junit.Test;

/**
 * Created by 传智播客*黑马程序员.
 */
public class DemoTest{

    @Test
    public void testSay(){
        Demo d = new Demo();
        String ret = d.say("maven");
        Assert.assertEquals("hello maven",ret);
    }

}

然后可以进行测试运行

运行的时候可以编辑运行模板:这是为了我们可以打断点操作

 

 

 

 

然后点击运行:

 

 上面是利用maven创建我们的java工程,下面我们创建web工程:

在main目录下创建webapp,即web项目根目录

 

 

可以看到webapp目录上没有小蓝点,这是因为,我们的pom文件中,该项目默认的打包方式是jar包,而我们的web项目部署发布是需要打成war包才能进行,所以我们要在该项目的坐标下,添加一个打包标签<packging>,里面写上war,

 

 

可以看到,我们的webapp目录上有小蓝点了,即告诉maven该项目是一个web工程,而不是java工程

我们还可以发现在该目录下还缺少一个WEB-INF这个动态资源目录,我们给他创建出来

 

还可以看到,在WEB-INF下还缺少一个web.xml文件,我们去创建,并在web.xml下利用我们之前配好的模板,给web.xml文件写入原有配置

 

 

maven工程的项目导入:

打开maven管理界面,点击加号,

 

选中我们要导入项目的pom.xml文件即可  

可以看到我们要导的项目已经进来了

 

我们以后去启动我们的web工程的话,没必要每次使用我们本地的Tomcat,maven提供了一个Tomcat插件,我们可以通过它去启动我们的项目

 

我们双击这个Tomcat7:run 就会帮我们启动一个Tomcat服务器软件,

 

这里可以设置我们的Tomcat端口号以及虚拟路径

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值