• 【Maven】基础


    Maven安装《《《

    一、Maven简介

    1、软件开发当中的阶段

    • 需求分析:分析项目具体完成的功能,有什么要求,具体怎么实现。
    • 设计阶段:根据分析的结果,设计项目使用什么技术,解决难点。
    • 开发阶段:编码实现功能。编译代码。自我测试。
    • 测试阶段:专业的测试人员,测试整个项目的功能,得出一个测试报告。
    • 项目的打包和发布:给用户安装项目。

    2、Maven能做什么

    • 1、项目的自动构建,帮助开发人员做项目代码的编译,测试,打包,安装,部署等工作。
    • 2、管理依赖。(管理项目中使用的各种jar包)
      • 依赖:项目中需要使用的其他资源,常见的是jar包。比如项目要使用mysql驱动,我们就说项目依赖mysql驱动。

    3、没有Maven怎么管理依赖

    • 管理jar,需要从网络中单独下载某个jar,需要选择正确的版本,手工处理jar文件之间的依赖。

    4、什么是Maven

    Maven是apache基金会的开源项目,使用java语言开发。

    Maven可以把jar包所依赖的其他jar包自动下载并引入项目。

    构建过程中的各个环节:清理,编译,测试,报告,打包,安装,部署

    Maven的使用方式:

    • Maven可以独立使用:创建项目,编译代码,测试程序,打包,部署等等。

    • Maven也可以和idea一起使用:通过idea借助Maven来实现编译,测试,打包等等。

    二、Maven中的概念

    1、约定的目录结构

    • Maven项目使用的大多数人遵循的目录结构,叫做约定的目录结构。
    • 一个Maven项目是一个文件夹。比如一个叫做Hello的项目:
    Hello     项目文件夹
    	\src
    		\main          叫做主程序目录(完成项目功能的代码和配置文件)
    			\java      源代码(包和相关的类定义)
    			\resource  配置文件
    		\test          放置测试程序代码的(开发人员自己写的测试代码)
    			\java      测试代码的(junit)
    			\resource  测试程序需要的配置文件
    	\pom.xml           Maven的配置文件,核心文件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    按照上面的目录创建相应的文件夹:
    在这里插入图片描述

    package com.powernode;
    
    public class HelloMaven{
    	public int addNumber(int n1,int n2){
    		System.out.println("hello maven");
    		return n1+n2;
    	}
    
    	public static void main(String args[]){
    		HelloMaven hello=new HelloMaven();
    		int res=hello.addNumber(10,20);
    		System.out.println("在main方法中,执行hello的方法"+res);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    在命令行输入:

    mvn compile
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    2、pom文件

    POM:即Project Object Model 项目对象模型。Maven把一个项目的结构和内容抽象成一个模型,在xml文件中进行声明,以方便进行构建和描述。

    <!-- project是根标签,后面是约束文件 -->
    <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/xsd/maven-4.0.0.xsd">
    
    
    <!-- pom模型的版本 -->
    <modelVersion>4.0.0</modelVersion>
    
    
    <!-- 当前项目的坐标 -->
    <groupId>com.bjpowernode</groupId>
    <artifactId>ch01-maven-java</artifactId>
    <version>1.0</version>
    
    
    <!-- maven的常用设置 -->
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    
    
    <!-- 依赖列表 -->
    <dependencies>
    
    
    <!-- 单元测试 -->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.11</version>
    <scope>test</scope>
    </dependency>
    </dependencies>
    <build>
    
    
    <!-- 资源插件 -->
    <resources>
    <resource>
    <directory>src/main/java</directory>
    
    
    <!-- 所在的目录 -->
    <includes>
    
    
    <!-- 包括目录下的.properties,.xml 文件都会扫描到 -->
    <include>**/*.properties</include>
    <include>**/*.xml</include>
    </includes>
    
    
    <!--   filtering 选项 false 不启用过滤器, *.property 已经起到过
              滤的作用了  -->
    <filtering>false</filtering>
    </resource>
    </resources>
    </build>
    </project>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    3、坐标

    • 坐标组成:groupid,artifiactid,version。

    • 坐标作用:确定资源的,是资源你的唯一标识。在maven中,每个资源都是坐标。坐标值是唯一的。简称叫gav。

    在这里插入图片描述

    <!-- 当前项目的坐标 -->
    <groupId>com.bjpowernode</groupId>
    <artifactId>ch01-maven-java</artifactId>
    <version>1.0</version>
    
    • 1
    • 2
    • 3
    • 4
    • groupId:组织名称,代码。是公司,团体或者单位的标识。这个值常使用公司域名的倒写。
    • artifactId:项目名称,如果groupId中有项目,此时当前的值就是子项目名。项目名称是唯一的。
    • version:版本,项目的版本号,使用的数字。由三位组成。例如:主版本号.次版本号.小版本号。
      • 注意:版本号中如果有-SNAPSHOT,表示快照,不是稳定的版本。

    项目使用gav:

    1、每个maven项目,都需要有一个自己的gav。

    2、管理依赖,需要使用其他的jar,也需要使用gav作为标识。

    搜索相关坐标的地址<<<

    在这里插入图片描述

    4、依赖 dependency

    依赖:项目中要使用的其他资源(jar)。

    需要使用maven表示依赖,管理依赖。通过使用dependency和gav一起完成依赖的使用。

    需要在pom.xml文件中,使用dependencies和dependency,还有gav完成依赖的说明。

    格式:表示我要找mysql项目的8.0.29版本的jar包。

    <dependencies>
    
    	<!-- 日志 -->
    	<dependency>
    	    <groupId>log4j</groupId>
    	    <artifactId>log4j</artifactId>
    	    <version>1.2.17</version>
    	</dependency>
    	
    	<!-- mysql驱动 -->
    	<dependency>
    	    <groupId>mysql</groupId>
    	    <artifactId>mysql-connector-java</artifactId>
    	    <version>8.0.29</version>
    		<packaging>jar</packaging>//表示此项目最终生成的是jar文件
    	</dependency>
    	
    </dependencies>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • maven使用gav作为标识,从互联网下载依赖的jar包,下载到你的本机上,由maven管理项目使用的这些jar包。
    • packaging:表示项目的打包类型,有jar,var,ear等等,默认是jar。

    5、仓库

    maven的仓库存放的是:

    • 1、maven工具自己的jar包。
    • 2、第三方的其他jar,比如项目中要使用mysql驱动。
    • 3、自己写的程序,可以打包为jar,存放到仓库。

    仓库的分类:

    • 1、本地仓库(本机仓库):位于自己的计算机,它是磁盘中的某个目录。本地仓库:默认路径是自己登录操作系统的账号的目录中。/.m2/repository
    • 2、修改本地仓库的位置:修改maven工具的配置文件
      • 【1】创建一个目录,作为仓库使用。目录不要有中文和空格。目录不要太深。

    在这里插入图片描述
    在这里插入图片描述

    <localRepository>D:/openrepository</localRepository>
    
    • 1

    在这里插入图片描述
    在把这个路径下的文件都拷贝到我们自己创建的目录。

    在这里插入图片描述

    6、Maven的生命周期,插件和命令

    • Maven的生命周期:项目构建的各个阶段。包括清理,编译,测试,报告,打包,安装,部署。

    • 插件:要完成构建项目的各个阶段,要使用maven命令,执行命令的功能是通过插件完成的,插件就是jar,一些类。

    • 命令:执行Maven的功能是由命令发出的。比如:mvn compile

    三、单元测试

    • Junit是一个单元测试的工具,在java当中经常使用。
    • 单元:在java中指的是方法。一个方法就是一个单元,方法是测试的最小单位。
    • 作用:使用Junit去测试方法是否完成了要求,开发人员自测。

    1、使用单元测试

    • 1、加入Junit的依赖(一些类和方法)‘
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 2、在src/test/java目录中创建测试类文件,写测试代码

    单元测试的建议:
    【1】测试类的定义,名称一般是Test+要测试的类的名称
    【2】测试类它的包名和要测试的类包名一样
    【3】在类中定义方法,要测试的代码:
    方法的定义:

    • public方法
    • 没有返回值
    • 方法名称自定义(建议Test+)
    • 方法没有参数

    【4】在测试类中的方法,可以单独执行,测试类也可以单独执行。

    2、创建测试类和测试方法

    在pom.xml文件中加入下面代码

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    在如下目录创建java的测试文件:

    在这里插入图片描述

    package com.powernode;
    import org.junit.Assert;
    import org.junit.Test;
    
    public class TestHelloMaven{
    //     定义多个独立的测试方法,每个方法都是独立的
    	@Test
    	public void testAddNumber1(int n1,int n2){
    		System.out.println("执行了测试类testAddNumber");
    		HelloMaven hello=new HelloMaven();
    		int res=hello.addNumber(10,20);
    		//把计算结果res交给junit判断
    		//期望值,实际值
    		//断言类,判断两个结果是否相等,如果不等就会抛出异常。
    		Assert.assertEquals(30,res);
    	}
    
    		@Test
    	public void testAddNumber2(int n1,int n2){
    		System.out.println("执行了测试类testAddNumber");
    		HelloMaven hello=new HelloMaven();
    		int res=hello.addNumber(20,30);
    		//把计算结果res交给junit判断
    		//期望值,实际值
    		//断言类,判断两个结果是否相等,如果不等就会抛出异常。
    		Assert.assertEquals(50,res);
    	}
    
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    3、命令

    • 1、mvn clean:清理命令,作用是删除以前生成的数据,删除target目录。
    • 2、mvn compile:编译命令,执行的是代码的编译,把src/main/java目录中的java代码编译为class文件。同时把class文件拷贝到target/classes目录。这个目录classes是存放类文件的根目录。(也叫做类路径classpath)
    • 3、mvn test-compile:编译命令,编译src/main/java目录中的源文件,把生成的class文件拷贝到target/test-classes目录。同时把src/test/resources目录中的文件拷贝到test-classes目录,同时把src/test/resources目录中的文件拷贝到test-classes目录
    • 4、mvn test:测试命令,执行test-classes目录的程序,测试src/main/java目录中的主程序代码是否符合要求。
    • 5、mvn package:打包,作用是把项目中的资源class文件和配置文件都放到一个压缩文件中,默认压缩文件是jar类型,web应用是war类型的。
    • 6、mvn install:把生成的打包的文件,安装到maven仓库。

    四、Maven与idea

    1、idea集成Maven

    idea有自带的maven,而我们要让idea使用我们自己安装的maven,这个过程叫做集成。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    -DarchetypeCatalog=internal
    
    • 1

    在这里插入图片描述
    在这里插入图片描述

    2、创建基于maven的普通项目

    首先创建一个空项目:
    在这里插入图片描述

    创建一个模块:

    在这里插入图片描述
    创建好项目了:
    在这里插入图片描述

    3、单元测试

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    注:这里如果不把java变成绿色的文件夹那么就无法在test里面创建java的class。

    idea maven项目的test目录下,无法直接创建class?

    在这里插入图片描述
    按上面四个序号创建package和class文件:做一个简单的加法测试

    public class HelloMaven {
        public int addNumber(int n1,int n2){
            return n1+n2;
        }
    
        public static void main(String[] args) {
            HelloMaven helloMaven=new HelloMaven();
            int res=helloMaven.addNumber(10,20);
            System.out.println("res="+res);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    public class TestHelloMaven {
        @Test
        public void testAddNumber1(){
            System.out.println("testAddNumber1~~~");
            HelloMaven hello = new HelloMaven();
            int res=hello.addNumber(10,20);
            Assert.assertEquals(30,res);
        }
        @Test
        public void testAddNumber2(){
            System.out.println("testAddNumber2~~~");
            HelloMaven hello = new HelloMaven();
            int res=hello.addNumber(20,30);
            Assert.assertEquals(50,res);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    4、maven的工具窗口

    在界面的右侧:
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    2022届秋招Java岗高频面试题盘点,老司机也未必全会,真的太卷了
    kubelet源码分析-创建
    人工智能 | ShowMeAI资讯日报 #2022.06.30
    【node和node-sass版本不一致导致报错】解决sass-loader和node-sass版本冲突问题,本人尝试过,真的解决错误了
    设计模式与应用:组合模式
    ros学习笔记10——rostopic中增加时间戳功能
    前端框架 React中Typecript的使用
    2022杭电多校(一)
    【PAT甲级 - C++题解】1048 Find Coins
    Python编程规范+最佳实践
  • 原文地址:https://blog.csdn.net/wxfighting/article/details/125599196