Maven核心概念详解

1.Maven工程约定目录结构

这个约定是大家都遵循的规则,每一个maven项目在一个磁盘中都是一个文件夹。例如Hello的目录结构:

Hello/
	/src
		/main #放主程序
			/java #放程序包和包中的java文件
			/resources #放java程序要使用的配置文件
		/test #放测试程序代码和文件的,不严格要求的话,可以没有
			/java #测试的程序包和包中的java文件
			/resources #测试java程序中要使用的配置文件

	/pom.xml #maven的核心文件

简单创建一个Hello的Maven程序

按照上面的目录结构创建
然后在/src/main/java里创建一个com目录,里面创建一个HelloMaven.java文件,代码如下

package com;

public class HelloMaven {
    public int add(int a, int b){
        return a+b;
    }

    public static void main(String[] args) {
        HelloMaven hello = new HelloMaven();
        System.out.println("10+20="+hello.add(10,20));
    }
}

在/Hello目录下执行命令编译
mvn compile 编译src/main目录下的所有java文件,第一次执行会下载编译所需要的依赖
请添加图片描述
https://repo.maven.apache.org:中央仓库地址

  • (1)为什么要下载?

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

  • (2)下载什么东西了?

下载了jar文件(插件),是用来完成某些功能的

  • (3)下载到哪里去了?

默认放在默认仓库(本机仓库):C:\Users\shinle(这个是电脑的用户名).m2\repository

这个可以改,修改本机存放资源的目录位置(设置本机仓库):
修改maven的配置文件,maven安装目录/conf/setting.xml,修改把这个标签移到注释外面,然后改你指定的路径(不要有中文路径)即可
请添加图片描述

mvn compile执行完的结果是在项目的根目录下生成一个target目录(称为结果目录),最后的编译的class文件都放在target里。
在这个目录下执行java命令运行
请添加图片描述

2.仓库

(1)仓库:仓库是存放东西的,存放maven使用的jar和我们项目使用的jar,存放一些资源
(2)仓库的分类

  • 本地仓库:就是上面的本机仓库C:\Users\shinle(这个是电脑的用户名).m2\repository

  • 远程仓库:在互联网的,使用网络才能使用的仓库。

    • 中央仓库:最权威的,所有开发人员都共享使用的一个集中的仓库https://repo.maven.apache.org,放在欧洲的一个服务器上。
    • 中央仓库的镜像:都放在一个服务器,这个服务器的压力会比较大,所以有镜像,就是相当于中央仓库的备份,在各大洲、重要城市都有镜像。
    • 私服:在公司的内部,在局域网中使用,不是对外使用的。

(3)仓库的使用:maven仓库的使用不需要人为参与。

开发人员用到的资源  -->  maven首先查本地仓库  --查不到-->  查私服 --查不到-->  查镜像 --查不到-->  查中央仓库

3.pom文件

pom:是maven的核心,叫做项目对象模型。

  • 基本信息
属性基本描述
modelVersionMaven模型的版本,对于Maven2和Maven3来说,它只能设置为 4.0.0。
groupId这是工程组的标识。它在一个组织或者项目中通常是唯一的。格式可以为:1.域名倒写。例如 com.baidu;2.域名倒写+项目名。例如:com.baidu.项目名
artifactId这是工程的标识。它通常是工程的名称。也是模块的名称,对应groupId中项目的子项目
version这是工程的版本号。version使用三位数字标识,例如1.0.0。如果项目还在开发中,是不稳定的版本,通常会在版本后带-SNAPSHOT。例如1.0-SNAPSHOT
packing项目打包的类型,可以使jar、war、rar、ear、pom,默认是jar
  • 依赖
属性基本描述
dependencies 和 dependency叫做依赖,指在项目中用到的各种资源说明
  • 配置属性
属性基本描述
properties用来定义一些配置属性的,例如设置项目构建源码的编码方式等等
  • 构建
属性基本描述
build表示与构建相关的配置,例如设置编译插件的jdk版本等
  • 继承
属性基本描述
parent声明要继承的父工程的pom配置,类似于java的继承机制
  • 聚合
属性基本描述
modules提供一个额外的模块,打包方式为pom,使用modules聚合其他模块,使本模块可以一键自动识别模块间的依赖关系来构建所有的模块。

4.生命周期

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

5.Maven常用命令

Maven对所有的功能都提供相应的命令,通过命令完成maven生命周期的执行。

  • mvn clean:清理(会删除原来的编译和测试的目录,即target目录。)
  • mvn compile:编译主程序(会在当前目录生成一个target目录,存放编译程序的字节码文件)
  • mvn test-compile:编译测试程序(会在当前目录生成一个target目录,存放编译测试程序的字节码文件)
  • mvn test:测试(会生成一个目录surefire-reports,保存测试结果)
  • mvn package:打包主程序
  • mvn install:安装主程序(按照本工程坐标保存带本地仓库中)
  • mvn deploy:部署主程序(会保存到私服仓库中,还会自动把项目部署到web容器中),这个一般不用它,因为涉及到服务器的一些配置,一般是人工部署。

注意:以上命令必须进入pom.xml所在目录下,并且执行每个步骤,都会把前面的步骤都执行了,哪一个步骤出错,后面就执行不了!

单元测试

单元测试(测试方法):用得是junit,是一个专门测试的框架(工具)
junit测试的内容:测试的是类中的方法,方法是测试的基本单元(单位)。
maven可以借助单元测试,批量测试类中大量的方法是否符合预期

使用步骤

  • 1.添加依赖,在pom.xml中加入依赖,例如
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>
  • 2.在maven项目中/src/test/java目录下,插件测试程序
    • 测试类的名称,通常为 Test + 测试的类名
    • 测试的方法名,通常为Test + 测试方法名
      其中测试方法定义规则:
      • 1.方法必须是public
      • 2.方法必须没有返回值
      • 3.方法名称自定义,但推荐Test + 测试方法名
      • 4.想要有注解 @Test

例如测试HelloMaven

  • 添加junit依赖
  • 创建测试类 TestHelloMaven
  • 在类里创建测试方法
package com;
import org.junit.Assert;
import org.junit.Test;
public class TestHelloMaven{
	@Test
	public void TestAdd(){
		HelloMaven hello = new HelloMaven();
		int res = hello.add(10,20);
		//验证,使用junit提供的方法,对比结果
		//assertEquals(期望值,实际值),相等证明正确,不等就抛异常,
		Assert.assertEquals(30,res);
	}
}

执行mvn test命令
测试成功
请添加图片描述

7.插件

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

<!--控制配置Maven构建项目的参数配置-->
<build>
	<!--配置插件-->
    <plugins>
    	<!--配置具体的插件-->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <!--插件的名称-->
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <!--配置插件信息-->
            <cofiguration>
            	<!--告诉maven我们的代码是在jdk1.8上编译的-->
            	<source>1.8</source>
            	<!--我们的程序应该运行在1.8的jdk环境上-->
            	<target>1.8</target>
            </cofiguration>
        </plugin>
    </plugins>
<build>

8.坐标

groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标,在众多的maven项目中可以唯一定位到某个项目。坐标也决定着将来项目在仓库中的路径和名称。
依赖
要用到的各种资源都在中央仓库:https://mvnrepository.com/,以groupId或者artifactId作为搜索条件。

9.依赖

一个Maven项目正常运行需要其他项目支持,Maven会根据坐标自动到本地仓库中查找。如果本地仓库没有,会到远程仓库寻找
依赖范围,使用的scope表示的。
scope的值有compile(所有阶段)、test(测试阶段)、provided(提供者:编译和测试),默认是compile
表示依赖在哪个构建项目的阶段起作用

compiletestprovided
对主程序是否有效
对测试程序是否有效
是否参与打包
是否参与部署
<!--dependencies表示依赖有很多个,以后添加依赖就直接在这里面加就行了-->
<dependencies>
	<!--依赖  相当于java中的import-->
	<dependency>
    		<groupId>mysql</groupId>
    		<artifactId>mysql-connector-java</artifactId>
    		<version>8.0.30</version>
    		<scope>compile</scope>
	</dependency>

	<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
</dependencies>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

忆亦何为

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

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

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

打赏作者

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

抵扣说明:

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

余额充值