Maven的简介
maven是什么
- Maven的本质是一个项目管理工具
- 将项目开发和管理过程抽象成一个项目对象模型(POM)
- POM:项目对象模型
Maven的作用:
- 项目构建:提供标准的、跨平台的自动化项目构建方式
- 依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源的版本冲突
- 统一开发结构:提供标准的、统一的项目结构
Maven的下载与安装:
maven的下载
官网:Maven – Welcome to Apache Maven
下载地址:Maven – Download Apache Maven
Maven的环境变量配置
1.依赖java,需要配置JAVA_HOME
2.设置MAVEN自身的允许环境,需要配置MAVEN_HOME
3.通过mvn命令测试是否配置成功
Maven的仓库
仓库:用于存储资源。包含各种jar包
仓库分类:
- 本地仓库:自己电脑上存储的仓库,连接远程仓库获取资源
- 远程仓库:
- 中央仓库:Maven团队维护,存储所有资源的仓库
- 私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
- 私服的作用:
- 保存具有版权的资源,包含购买或自主研发的jar
- 中央仓库的jar都是开源的,不能存储具有版权的资源
- 一定范围内共享资源,仅对内部开放,不对外共享
- 保存具有版权的资源,包含购买或自主研发的jar
坐标
什么是坐标:
Maven中的坐标用于描述仓库中资源的位置
Central Repository:
Maven的坐标组成
- groupId:定义当前Maven项目隶属组织名称
- artifactId:定义当前maven的名称
- version:定义当前项目版本号
找jar包的网址:https://mvnrepository.com
仓库配置
本地仓库的位置
<localRepository>D:\Maven_develop\apache-maven-3.6.1\mvn_repo</localRepository>
镜像仓库配置:还是在setting文件中修改
<mirrors>
<!--此处手动通知Maven访问的中央仓库位置-->
<!--如果不设置,Maven会到英国的中央仓库下载-->
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/public </url>
</mirror>
</mirrors>
第一个Maven程序
pom.xml文件
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--此项目的组织、名字、打包方式-->
<groupId>org.aqiuo</groupId>
<artifactId>spring</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<!--依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
插件
mvc compile #编译
mvc clear #清理
mvc test #测试
mvc package #打包
mvc install #安装到本地仓库
Maven的idea的设置
标记目录(是目录发辉作用,牢记约定大于配置)
添加插件
<build>
<!--设置插件-->
<plugins>
<!--具体的插件位置-->
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
</plugin>
</plugins>
</build>
依赖管理
依赖配置
依赖指当前现项目运行所需要的jar,一个项目可以设置多个依赖
格式:
<!--设置所有依赖的 jar-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
依赖传递
- 依赖具有传递性:
- 直接依赖
- 简介依赖
- 依赖传递的冲突问题:
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低。层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,父级配置顺序靠前的覆盖配置顺序靠后的。
- 特殊优先:当同级配置了相同的资源的不同版本,后配置的覆盖先配置的
可选依赖:
私房钱---自己不给别人看(true:不给别人看,导这个包将不会有这个jar)
(不好用:万一别人想用怎么办)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<optional>true</optional>
</dependency>
</dependencies>
排除依赖:
别人主动断开依赖的资源,被排除的资源无需指定版本---不需要(注意排除不需要版本号了)
(含有所有导报的依赖包,需要自己排除)
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<!--排除依赖-->
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
</dependency>
依赖范围
依赖的jar默认的情况是任何地方都可以,通过标签设置其作用范围
作用范围:
- 主程序范围有效
- 测试范围有效
- 是否参与打包
scope | 主代码 | 测试代码 | 打包 | 范例 |
compile | Y | Y | Y | log4j |
test | Y | junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | jdbc |
示例
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
声明周期与插件
生命周期
插件的使用:
<build>
<plugins>
<plugin>
<groupId></groupId>
<artifactId></artifactId>
<version></version>
<executions>
<execution>
<goals>
<!--对main文件中的东西打包-->
<goal>jar</goal>
</goals>
<!--执行到的周期-->
<phase>generate-resources</phase>
</execution>
</executions>
</plugin>
</plugins>
本文仅介绍了一部分基础,受篇幅原因,剩下文章在这个 maven完结,你真的学完了吗-CSDN博客 跳转