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文件实现项目的构建依赖的管理





    
    
    
  4.0.0
  

②约定的目录结构

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)

  com.org
  mavenProjectName
  1.0-SNAPSHOT
  jar   

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包

  
    
     
        mysql
        mysql-connector-java
        5.1.16
        compile
    

 

⑤仓库管理

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这个目录

     D:/myRepository

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

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

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

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

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

maven的核心概念(二)——Maven_第1张图片

⑥生命周期

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

单元测试(junit):

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

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

使用单元测试:

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


    junit
    junit
    4.12
    test

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
  com.org
  HelloMaven
  1.0-SNAPSHOT
  jar
打包的文件名: artifactId-version.packaging

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

插件: maven-install-plugin 版本 2.4 

查看打包的文件:

  com.org
  HelloMaven
  1.0-SNAPSHOT
  jar

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

自定义配置插件:

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



  
    
	
		org.apache.maven.plugins
		maven-compiler-plugin
		3.8.1
		
			1.8 
			1.8 
		
	
  
 

⑧继承

⑨聚合(详看第五章)

⑩常用设置

1)properties的配置


    1.8 源码编译 jdk 版本
    1.8 运行代码的 jdk 版本
    UTF-8 项目构建使用的编码,避免中文乱码
    UTF-8 生成报告的编码

2)全局变量

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

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

使用步骤:

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


  UTF-8
  1.8
  1.8
  
  5.2.5.RELEASE
  4.11

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


  org.springframework
  spring-core
  ${spring.version}



  org.springframework
  spring-web
  ${spring.version}

3)使用资源插件

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

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

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


  
  
    
      src/main/java
      
      
        **/*.properties
        **/*.xml
      
        
      false
    
  

你可能感兴趣的:(Maven,maven,自动化,java)