Maven常用命令使用及Maven仓库等核心概念

本文详细介绍了Maven的核心概念,包括约定的目录结构、仓库管理、POM文件、生命周期和常用命令。通过实例演示了如何进行样例测试,配置本地资源目录,以及使用Maven进行单元测试。此外,还讲解了仓库的概念和使用,以及POM文件中的坐标、打包类型和依赖管理。
摘要由CSDN通过智能技术生成

Maven学习笔记

Chapter 2 Maven核心概念

2.1 Maven工程约定目录结构

Maven中的目录结构不是任意的,而是约定好的。maven中约定的目录结构:

每一个maven的项目在磁盘中都是一个文件

MyProject

|----src

​ |----|----main #放你主程序java代码和配置文件

​ |----|----|----java #程序包和包中的java文件

​ |----|----|----recource #你的java程序中要使用的配置文件

|----test #放测试程序代码和文件的(可以没有)

​ |----|----main #测试程序包和包中的java文件

​ |----|----resource #测试java程序中要用的配置文件

|----pom.xml #maven的核心文件(maven项目必须有)

疑问:mvn compile 编译src/main目录下的所有java文件

(1)为什么要下载

maven工具执行的操作是需要很多的插件(java类—jar文件)去完成的

(2)下载什么?

jar文件–插件–插件是完成某些功能的

(3)下载的东西存放到哪?

默认仓库:

C:\Users\(登录操作系统的用户名)Administrator\.m2\repository

执行mvn compile,结果是在项目的根目录下形成一个target目录。项目编译的

2.1.1 样例测试

为了验证Maven的目录结构,我们做这样的一个实验:

  • 首先在一个文件下建立一个目录结构:

  • image-20210804225502839

    注意的是src下还要有一个pom.xml文件。pom.xml文件已经提供:

    链接:https://pan.baidu.com/s/1RmEXwjAiB3tuejyGWR0drg
    提取码:0uy7

    将pom.xml文件复制到src的同级目录下即可:

    image-20210804225649542

    在这之后我们在src-main-java下编写一个java文件:

    image-20210804230105606

    这个文件的内容随意,是一个正确的java代码就行。这里提供一个可用于该步骤测试的代码:

    package syq.xyz;
    
    public class myTest{
    	public static int myMul(int x, int y){ return x * y;}
    	public static void main(String[] args){
    		int x = 3, y = 6;
    		System.out.println(myMul(x,y));
    	}
    }
    

    之后我们进行测试,在命令行中进行下面的操作,可以看到目录的结构:

image-20210804213344052

然后我们利用maven将编写的java文件编译成class文件,这里使用cmd,将目录切换到项目的根目录,即src所在的目录。启动cmd,输入命令mvn compile,编译项目下的所有的文件。这时就会进行下面的过程,或者第一次使用maven的话,那么会进行一些资源的Downloading。默认是会下载到上面提到的C盘的User……下。

image-20210804220414535

编译完后我们就能在src目录下看到一个同级的目录:target。target中就有我们编译完成的文件。

image-20210804230639309

我们运行这个.class文件,在命令行中输入下面的代码即可,可以看到代码成功输出了答案18.

C:\Users\(登录操作系统的用户名)Administrator\.m2\repository

另外如果是初次使用maven的话,在上述的编译过程中会出现下载Downloading的界面,上面解释了下载的文件会默认存储在C:\Users\(登录操作系统的用户名)Administrator\\.m2\repository下,即C盘下。其实我们可以更换这个位置,步骤如下。

2.1.2 设置本机存放资源目录位置

设置本机存放资源目录的位置:

1.找到:maven安装目录/conf/settings.xml。先备份setting.xml

2.修改的目录,注意目录中不要含有中文。

将settings.xml中的增加成下图所示:

image-20210804223241183

保存即可。

2.2 仓库

2.1.1仓库的概念
  • 仓库是什么?

仓库是用来存放东西的,存放maven使用的jar和我们项目使用的jar

maven使用的各种插件(各种jar)

项目使用的jar(第三方的工具)

  • 仓库的分类

本地仓库:个人计算机上的文件夹,存放各种jar

远程仓库:在互联网上的,需要使用网络才能使用的仓库

①中央仓库:最权威的,所有的开发人员都共享使用的一个集中的仓库。

②中央仓库的镜像:中央仓库的备份,在各大洲,重要的城市都有这个镜像

③私服:在公司的内部,在局域网中使用,不是对外使用的。

2.1.2 仓库的使用

maven仓库的使用不需要人为的干预。

如:开发人员需要使用mysql的驱动–>maven首先查本地仓库—>判断有无本地资源

查询顺序:私服—>中央仓库的镜像—>中央仓库

2.3 POM文件

pom:Project Object Model项目对象模型

2.3.1 坐标

在上述我们使用的pom文件中就有下面的信息。【groupId】+【artifactId】+【version】 = 坐标。坐标是在互联网上唯一标识一个项目的标记。

  <groupId>com.bjpwoernode.maven</groupId>
  <artifactId>ch01-maven</artifactId>
  <version>1.0-SNAPSHOT</version>

坐标通常表现为下面的形式:

  <groupId>公司域名倒写</groupId>
  <artifactId>自定义项目名称</artifactId>
  <version>自定义版本号</version>

如何使用坐标?定位!

Maven Repository: Search/Browse/Explore (mvnrepository.com):搜索使用的中央仓库,使用groupId或者artifactId作为搜索

以mySql为例搜索可以得到下面的结果:

image-20210804233442471

image-20210804233457703

2.3.2 packaging

打包后压缩文件的扩展名,默认是jar。web应用是war

packaging也可以不写,不写也是jar

2.3.3 依赖dependency

dependencies和dependency:项目中要使用的各种资源说明,比如我的项目要使用mySql驱动:
可以这样添加依赖:

image-20210805095552722

2.3.4配置属性properties

配置属性properties:用来定义一系列属性的。方便日后统一升级。

2.3.5 构建build

maven在进行项目的构建时,配置信息,例如指定编译java代码是用的jdk的版本等

2.4 Maven的生命周期

构建项目所经历的编译测试,打包,部署

maven的生命周期就是Maven构建项目的过程:清理,编译,测试,报告,打包,安装,部署

maven的插件:maven命令执行时真正完成功能的是插件,插件就是一些jar,就是一些java类

2.5 Maven的常见命令

maven的命令:maven可以独立使用,通过命令来完成项目的生命周期过程

  • maven clean

    清理之前已经编译的内容,但不会清理已经下载的jar

  • maven compile

    编译主程序:main/java下的所有程序

  • mvn test-compile

    编译main/test下的所有程序

  • mvn test

  • mvn package

  • mvn install

  • mvn depoly

2.6 Maven的单元测试

1)单元测试(测试方法的):用的是Junit,Junit是一个专门测试的框架(工具)。

​ Junit测试的内容:测试的是类中的方法,每一个方法都是独立测试的。

​ 方法是测试的基本单位(单元)。

​ maven借助单元测试,批量测试类中的大量方法是否符合预期的。

2)使用步骤

​ 1.加入依赖,在pom文件中添加依赖项,如下:

image-20210805103243826

  1. 在maven项目中的src/test/java目录下,创建测试程序

    推荐的创建类和方法的提示:

    • 测试类的方法和名称 是Test + 你要测试的类名
    • 测试的方法名称使用搞得是 Test + 方法的名字

    例如,我们需要测试myTest:创建TestmyTest

    @Test
    public void TestmyMul{
        //测试myTest的myMul方法是否正确
    }
    

    其中TestmyMul叫测试方法,它的定义规则:

    • 方法必须是public
    • 方法必须没有返回值
    • 方法名是自定义的,但建议使用Test + 方法名称
    • 在方法的上面加上注解:@Test

命令测试及单元测试

单元测试过程:

打开pom.xml文件,添加单元测试所需要的Junit依赖项:

image-20210805193842737

在src/test/java下编写测试代码:

image-20210805104921697

注意,我们要测试的程序myTest是在syq.xyz包下,我们这里要编写的测试程序也必须在这个包下,所以我们在src/test/java路径下建包:syq.xyz,然后在包下编写符合规范的测试类和测试方法。编写的类如下:

package syq.xyz;
import org.junit.Assert;
import org.junit.Test;

import java.sql.SQLOutput;

public class TestmyTest{
    @Test
    public void testmyMul(){
        myTest my = new myTest();
        int res = my.myMul(10,20);
        //验证10*20是不是200, Junit提供的方法,用于结果对比
        //assertEquals(期望值,实际值),如果两个值相等,说明是正确的,不等就会抛异常
        Assert.assertEquals(200, res);
    }
}

image-20210805194020897

下面我们尝试使用各种命令:

  • mvn clean

在项目的src同级目录下打开cmd,执行mvn clean命令

image-20210805212945795

可以看到执行完命令后原先的target文件夹消失了。之前的下载的资源被删除,使用的是maven clean plugin插件。

image-20210805213103148

  • mvn compile

编译main\java目录下的java文件为class文件,同时把class 文件拷贝到target/classes目录下面,同时把main/resources目录下的所有文件都拷贝到``

使用的是maven recource插件

image-20210805213614543

  • mvn test-compile

test-compile命令是将test目录下的测试程序进行编译,将java编译为class文件。

image-20210805214258220

  • mvn test

在执行这个命令时,上述所有的命令都会被执行一次。所以修改了test中的测试代码可以不用再进行一个mvn test-compile。直接运行mvn test,上述都过程会被自动执行。

mvn test会执行测试程序,并给出测试的结果:

image-20210805223715783

上述的情况只是测试成功的情况,对于测试失败的情况会出现异常的抛出。我们修改测试类TestmyTest.java

image-20210805224824934

然后我们使用命令行再次进行mvn test观察输出情况:

image-20210805225122557

image-20210805225226028

我们在上面给出的目录中可以查阅打印的报告:

image-20210805225338648

最后我们修改代码到正常状态,接着测试一次:

package syq.xyz;
import org.junit.Assert;
import org.junit.Test;

public class TestmyTest{
    @Test
    public void testmyMul(){
        myTest my = new myTest();
        int res = my.myMul(10,20);
        //验证10*20是不是200, Junit提供的方法,用于结果对比
        //assertEquals(期望值,实际值),如果两个值相等,说明是正确的,不等就会抛异常
        Assert.assertEquals(200, res);
    }
    @Test
    public void testmyMul2(){   //再编写一个测试程序
        myTest my2 = new myTest();
        int res = my2.myMul(10,30);
        //故意使用一个错误的期望值:
        Assert.assertEquals(300,res);
    }
}

修改后测试无异常:

image-20210805225619233

  • mvn package

打包只打包的是src/main下面的内容。没有测试的类。

执行package的时候整个过程又运行了一次。打包的结果放在目录target\ch01-maven-1.0-SNAPSHOT.jar

image-20210805225953789

image-20210805230111210

  • mvn install

安装主程序(把本工程打包,并且按照本工程的坐标安装到本地仓库中去)

image-20210806102415666

将运行结果进行了安装。

image-20210806103503476

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Blanche117

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

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

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

打赏作者

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

抵扣说明:

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

余额充值