maven的核心概念(二)——Maven

目录

一、Maven的两种使用方式(详看第三章)

二、Maven的核心概念

①POM 

②约定的目录结构

③坐标

④依赖管理

⑤仓库管理

⑥生命周期

⑦插件和目标

⑧继承

⑨聚合(详看第五章)

⑩常用设置

1)properties的配置

2)全局变量

3)使用资源插件


一、Maven的两种使用方式(详看第三章)

1)maven可以独立使用: 创建项目,编译代码,测试程序,打包,部署等等(要在pom文件目录下进行编译)

2)maven和idea一起使用:通过idea借助maven,实现编码,测试,打包等等

二、Maven的核心概念

①POM 

POM:Project Object Model 项目对象模型, maven把项目当做模型处理,即对模型的操作相当于对项目的操作,maven是通过pom.xml文件实现项目的构建依赖的管理

<?xml version="1.0" encoding="UTF-8"?>

<!-- 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>
  
</project>

②约定的目录结构

maven项目使用的是大多人遵循的目录结构,即叫做约定的目录结构

mavenProject                项目文件夹
    \src
    	\main				主程序目录(完成项目功能的代码和配置文件)
             \java            源代码(包和相关的类定义)
    		 \resources	      配置文件
    	\test               测试程序目录(开发人员自己写的测试代码)
    		 \java            测试代码(junit)
    		 \resources       测试程序需要的配置文件
    
    \pom.xml                maven的核心配置文件

③坐标

坐标三剑客:groupId、artifactId、version

坐标作用:

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

 资源仓库: Maven Repository: Search/Browse/Explore (mvnrepository.com)

  <groupId>com.org</groupId>
  <artifactId>mavenProjectName</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>   

groupId: 组织名称。 公司,团体或者单位的标识,这个值常使用的公司域名的倒写。
         例如:www.baidu.com, groupId: com.baidu

         如果项目规模比较大, 也可以是 域名倒写+大项目名称。
	     例如: www.baidu.com ,  无人车: com.baidu.appollo

artifactId:项目名称。 如果groupId中有项目,此时当前的值就是子项目名。 项目名称是唯一的。

version:项目的版本号,三位数字组成。 如 主版本号.次版本号.小版本号, 如:5.2.4
         注意:版本号中有-SNAPSHOT, 表示快照,不是稳定的版本。   

packaging 项目打包的类型。 有jar ,war, ear, pom等等(默认是jar)  
   

④依赖管理

依赖:项目中要使用的其他资源 

maven在pom.xml文件中通过使用dependencygav来表示依赖、管理依赖

maven使用gav作为标识,从互联网下载所需要的资源,并由maven管理项目所依赖的资源

依赖范围:使用scope表示依赖的范围

依赖范围表示: 这个依赖在项目构建的哪个阶段起作用

依赖范围scope :

  • compile:默认, 参与构建项目的所有阶段
  • test:测试,在测试阶段使用, 比如执行mvn test会使用junit 。
  • provided: 提供者。 项目在部署到服务器时,不需要提供这个依赖的jar , 而是由服务器这个依赖的jar包
<dependencies>
  
    <!-- mysql驱动 -->
     <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.16</version>
        <scope>compile</scope>
    </dependency>

</dependencies> 

⑤仓库管理

maven仓库存放:

  1. maven工具自己的jar包

  2. 第三方的其他jar, 比如项目中要使用mysql驱动

  3. 自己写的程序可以打包为jar ,并存放到仓库

仓库的分类:

  1. 本地仓库(本机仓库): 位于你自己的计算机, 它是磁盘中的某个目录。

    本地仓库:默认路径,是你登录操作系统的账号的目录中/.m2/repository

    修改本地仓库的位置:修改maven工具的配置文件(maven的安装路径\conf\setting.xml)

    步骤:

    1)创建一个目录,作为仓库使用。 目录不要有中文和空格,目录不要太深。

    例如: D:\myRepository

    2)修改setting.xml文件,指定 D:\myRepository这个目录

     <localRepository>D:/myRepository</localRepository>

  2. 远程仓库: 需要通过联网访问的

  3. 1)中央仓库: 一个ftp服务器, 存放了所有的资源。

    2)中央仓库的镜像: 就是中央仓库的拷贝。 在各大主要城市都有镜像。

    3)私服:在局域网中使用的。 私服就是自己的仓库服务器。 在公司内部使用的。

maven使用仓库: maven自动使用仓库, 当项目启动后, 执行了maven的命令, maven首先访问的是本地仓库, 从仓库中获取所需的jar, 如果本地仓库没有 ,需要访问私服或者中央仓库或者镜像。

⑥生命周期

maven的生命周期: 即项目构建的各个环节。 包括 清理, 编译, 测试,报告,打包,安装,部署

单元测试(junit):

junit是一个单元测试的工具, 在java中经常使用。

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

使用单元测试:

1)加入junit的依赖(一些类和方法)

<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

2)在src/test/java 目录中创建测试类文件、 写测试代码

单元测试使用的建议:

  • 1.测试类的定义, 名称一般是Test+要测试的类名称
  • 2.测试类它的包名和要测试的类包名一样。
  • 3.在类中定义方法,要测试代码。
    • 方法的定义:public方法,
    • 没有返回值
    • 方法名称自定义(建议 Test+测试的方法名称)
    • 方法没有参数

4.测试类中的方法可以单独执行,测试类也可以单独执行

5.在方法的上面加入@Test

package com.org;

//	导包
import org.junit.Assert;
import org.junit.Test;

public class TestHelloMaven{
	
	//	定义多个测试方法,每个测试方法都是独立的
	@Test
	public void TestaddNumber1(){
		System.out.println("测试方法1......");
		HelloMaven hm = new HelloMaven();
		int res = hm.addNumber(10,40);
		
		//	把计算结果交给junit判断
		//	Assert.assertEquals(期望值,实际值);
		Assert.assertEquals(50,res);
	}
	
	@Test
	public void TestaddNumber2(){
		System.out.println("测试方法2......");
		HelloMaven hm = new HelloMaven();
		int res = hm.addNumber(20,40);
		
		//	把计算结果交给junit判断
		//	Assert.assertEquals(期望值,实际值);
		Assert.assertEquals(50,res);
	}
}

⑦插件和目标

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

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

命令:

1) mvn clean: 清理命令,

作用:删除以前生成的数据, 删除生成的target目录。

插件: maven-clean-plugin , 版本是 2.5

2)mvn compile:编译命令,执行的代码编译

作用:把src/main/java目录中的java代码编译为class文件,同时把class文件拷贝到           target/classes目录。 这个classes目录是存放类文件的根目录(也叫做类路径,classpath)

插件:

  • maven-compiler-plugin 版本3.1。 编译代码的插件
  • maven-resources-plugin 版本2.6 。 资源插件
    • 作用:把src/main/resources目录中的文件拷贝target/classes目录中

3)mvn test-compile: 编译命令(编译src/test/java目录中的源文件),

作用:把生成的class拷贝到target/test-classes目录,同时把src/test/resources目录中的文件             拷贝到 test-clasess目录

插件:

  • maven-compiler-plugin 版本3.1。 编译代码的插件
  • maven-resources-plugin 版本2.6 。 资源插件

4)mvn test:测试命令

作用:执行 test-classes目录的程序, 测试src/main/java目录中的主程序代码是否符合要求

插件: maven-surefire-plugin 版本 2.12.4

5)mvn package:打包

作用:把项目中的class文件和配置文件都放到一个压缩文件中, 默认压缩文件是jar类型                   的,web应用是war类型

插件:maven-jar-plugin 版本 2.4。 执行打包处理。

  • 生成一个jar扩展的文件, 放在target目录下
  • 打包的文件包含的是 src/main目录中的所有的生成的class和配置文件,和test无关
  • 生成的是HelloMaven-1.0-SNAPSHOT.jar
  <groupId>com.org</groupId>
  <artifactId>HelloMaven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>
打包的文件名: artifactId-version.packaging

6)mvn install : 把生成的打包文件 ,安装到maven仓库(本地仓库

插件: maven-install-plugin 版本 2.4 

查看打包的文件:

  <groupId>com.org</groupId>
  <artifactId>HelloMaven</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

groupId中的值:如果有 "." ,说明前后都是独立的文件夹。 com\org
artifactId: 独立的文件夹
version:独立的文件夹

自定义配置插件:

                        在pom.xml文件中的build标签中设置插件

<!-- 设置构建项目相关的内容 -->
<build>
  <plugins>
    <!-- 设置插件 -->
	<plugin>
		<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-compiler-plugin</artifactId>
		<version>3.8.1</version>
		<configuration>
			<source>1.8</source> <!-- 指定编译代码的jdk版本 -->
			<target>1.8</target> <!-- 运行java程序使用的jdk版本-->
		</configuration>
	</plugin>
  </plugins>
</build> 

⑧继承

⑨聚合(详看第五章)

⑩常用设置

1)properties的配置

<properties>
    <maven.compiler.source>1.8</maven.compiler.source> 源码编译 jdk 版本
    <maven.compiler.target>1.8</maven.compiler.target> 运行代码的 jdk 版本
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 项目构建使用的编码,避免中文乱码
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 生成报告的编码
</properties>

2)全局变量

在properties定义标签,这个标签就是一个变量, 标签的文本就是变量的值

使用全局变量表示多个依赖使用的版本号

使用步骤:

1.在properties标签中,定义一个标签,指定版本的值

<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>
  <!--自定义变量-->
  <spring.version>5.2.5.RELEASE</spring.version>
  <junit.version>4.11</junit.version>
</properties>

2.使用全局变量, 语法: ${变量名}

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>${spring.version}</version>
</dependency>

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-web</artifactId>
  <version>${spring.version}</version>
</dependency>

3)使用资源插件

处理的配置文件的信息, maven默认处理配置文件

①:maven会把src/main/resources目录中的文件, 拷贝到target/classes目录下

②:maven只处理src/main/java目录中的 .java文件,把这些java文件编译为class,拷贝到 target/classes目录中。 不处理其他文件

<build>
  <!--资源插件
      告诉maven把 src/main/java目录中的 指定扩展名的文件 拷贝到 target/classes目录中。
  -->
  <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>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

来得晚一些也行

观众老爷,请赏~

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

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

打赏作者

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

抵扣说明:

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

余额充值