Maven核心概念

一、Maven基础知识

Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

1、Maven模型

Maven核心概念_第1张图片

2、仓库分类

  • 本地仓库:自己计算机上的一个目录
  • 中央仓库:由Maven团队维护的全球唯一的仓库
    地址:https://repo1.maven.org/maven2/
  • 远程仓库(私服):一般由公司团队搭建的私有仓库
  • jar包的查找顺序为:本地仓库->远程仓库->中央仓库

3、Maven常用命令

上节我们演示了Maven的使用,使用的就是如下命令:

  • compile:编译
  • clean:清理
  • test:测试
  • package:打包
  • install:安装

4、Maven生命周期

  • Maven构建项目生命周期描述的是一次构建过程经历了多少事件
  • Maven对项目构建的生命周期划分为3套
    clean:清理工作
    default:核心工作,例如编译,测试,打包,安装等
    site:产生报告,发布站点等

Maven核心概念_第2张图片

5、Maven坐标详解

Ⅰ、什么是坐标?

Maven中的坐标是资源的唯一标识

使用坐标来定义项目或引入项目中需要的依赖

Ⅱ、Maven坐标主要组成

groupId:定义当前Maven项目隶属组织名称(通常域名反写,例如:com.liming)

artifactId:当前项目的模块名称(类似于:maven)

version:版本

<groupId>com.liminggroupId>
<artifactId>mavenartifactId>
<version>1.0-SNAPSHOTversion>

6、依赖范围
Maven核心概念_第3张图片

举例:

<dependencies>
		<dependency>
			<!—坐标 -->
			<groupId>junitgroupId>
			<artifactId>junitartifactId>
			<version>4.12version>
			
			<scope>testscope>
		dependency>
	dependencies>

二、Maven进阶

1、依赖传递

如果A依赖B,B依赖C,那么A→B和B→C都是直接依赖,而A→C是间接依赖。
当存在间接依赖的情况时,主工程对间接依赖的jar可以访问吗?这要看间接依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问。

2、依赖传递冲突问题

  • 路径优先:路径最短者优先
  • 声明优先:路径相同时先声明者优先 (这里“声明”的先后顺序指的是dependency标签配置的先后顺序)

3、可选依赖与排除依赖

可选依赖指对外隐藏当前所依赖的资源——不透明

<dependency>
	<groupId>com.liminggroupId>
	<artifactId>maven_01artifactId>
	<version>1.0-SNAPSHOTversion>
	
	<optional>falseoptional>
dependency>

排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要

举例:
当前工程为public,直接依赖environment。environment依赖commons-logging的1.1.1对于public来说是间接依赖。当前工程public直接依赖commons-logging的1.1.2加入exclusions配置后可以在依赖environment的时候排除版本为1.1.1的commons-logging的间接依赖。

Environment工程:
<dependency>
	<groupId>commons-logginggroupId>
	<artifactId>commons-loggingartifactId>
	<version>1.1.1version>
dependency>


当前工程:
<dependency>
	<groupId>com.liming.mavengroupId>
	<artifactId>EnvironmentartifactId>
	<version>0.0.1-SNAPSHOTversion>
	
	<exclusions>
		<exclusion>
			<groupId>commons-logginggroupId>
			<artifactId>commons-loggingartifactId>
		exclusion>
	exclusions>
dependency>
<dependency>
	<groupId>commons-logginggroupId>
	<artifactId>commons-loggingartifactId>
	<version>1.1.2version>
dependency>

4、继承

继承描述的是两个工程之间的关系,与Java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承

步骤:

1、创建Maven模块,设置打包类型为pom

<packaging>pompackaging>

2、在父工程的pom文件中配置依赖关系(子工程将沿用父工程中的依赖关系)

 <dependencies>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-webmvcartifactId>
            <version>5.2.10.RELEASEversion>
        dependency>
        ......
    dependencies>

3、配置子工程中可选的依赖关系

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibabagroupId>
                <artifactId>druidartifactId>
                <version>1.2.13version>
            dependency>
        dependencies>
        ......
    dependencyManagement>

4、在子工程中配置当前工程所继承的父工程


    <parent>
        <groupId>com.liminggroupId>
        <artifactId>maven_parentartifactId>
        <version>1.0-SNAPSHOTversion>
        
        <relativePath>../maven_parent/pom.xmlrelativePath>
    parent>

5、在子工程中配置使用父工程中可选依赖的坐标

dependencies>
	<dependency>
          <groupId>com.alibabagroupId>
          <artifactId>druidartifactId>
     dependency>
dependencies>

在这里插入图片描述
5、属性

以对Spring的jar包依赖为例:Spring的每一个版本中都包含spring-corespring-context等jar包。我们应该导入版本一致的Spring jar包,而不是使用4.0.0的spring-core的同时使用4.1.1的spring-context。

问题是如果我们想要将这些jar包的版本统一升级为4.1.1,是不是要手动一个个修改呢?显然,我们有统一配置属性的方式:

<properties>
	<spring.version>4.1.1.RELEASEspring.version>
properties>

<dependency>
 <groupId>org.springframeworkgroupId>
 <artifactId>spring-coreartifactId>
 <version>${spring.version}version>
dependency>
<dependency>
 <groupId>org.springframeworkgroupId>
 <artifactId>spring-contextartifactId>
 <version>${spring.version}version>
dependency>
<dependency>
 <groupId>org.springframeworkgroupId>
 <artifactId>spring-jdbcartifactId>
 <version>${spring.version}version>
dependency>
<dependency>
 <groupId>org.springframeworkgroupId>
 <artifactId>spring-ormartifactId>
 <version>${spring.version}version>
dependency>
<dependency>
 <groupId>org.springframeworkgroupId>
 <artifactId>spring-webartifactId>
 <version>${spring.version}version>
dependency>
<dependency>
 <groupId>org.springframeworkgroupId>
 <artifactId>spring-webmvcartifactId>
 <version>${spring.version}version>
dependency>

这样一来,进行版本调整的时候只改一改地方就行了

6、配置文件加载属性

1、定义属性


    <properties>
        <spring.version>5.2.10.RELEASEspring.version>
        <junit.version>4.12junit.version>
        <jdbc.url>jdbc:mysql://127.0.0.1:3306/ssm_dbjdbc.url>
    properties>

2、配置文件中引入属性

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=${jdbc.url}
jdbc.username=root
jdbc,password=root

3、开启资源目录加载属性的过滤器

<build>
        <resources>
            <resource>
                <directory>${project.basedir}/src/main/resourcesdirectory>
                <filtering>truefiltering>
            resource>
        resources>
build>

4、配置maven打war包时,忽略web.xml检查

<plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-war-pluginartifactId>
        <version>3.2.3version>
        <configuration>
            <failOnMissingWebXml>falsefailOnMissingWebXml>
        configuration>
plugin>

7、版本管理

1、工程版本:

SNAPSHOT(快照版本)

在这里插入图片描述

RELEASE(发布版本)

在这里插入图片描述

2、发布版本:

  • alpha版
  • beta版
  • 纯数字版

你可能感兴趣的:(Maven,maven,junit,java)