Maven Study Notes
Maven是什么?
Maven是由Java编写的一种项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
POM( Project Object Model ): 项目对象模型
Maven核心:pom.xml、依赖管理Dependency、本地仓库maven-repo
我们将整个pom看作是一个对象,而该对象的行为、属性都存放在pom.xml配置文件当中。在正常开发中,项目通常是由多人协作完成,各开发人员负责不同模块。那么在其他的模块当中可能会使用到另一模块的内容,此时就会将该模块依赖注入pom.xml。而依赖通常是存放在本地仓库当中
Maven作用:
- 项目构建,提供标准的、跨平台的自动化构建方式
- 依赖管理,方便快捷的管理项目依赖资源(jar包),避免资源间的版本冲突问题
maven仓库:
- 本地仓库:在我电脑中存放
- 远程仓库 包含中央仓库(由maven开发人员维护,其中包含了全世界几乎所有的jar包资源)、私服仓库(中央仓库的子集)
- 存放在中央仓库中的资源,由全世界共享。也就是被称为开源,独有的版权资源不会放在中央仓库也就不属于开源,例如oracle的sql驱动就不是开源
mvn中央仓库:https://mvnrepository.com/
mvn坐标
让maven准确定位找到对应资源
- groupId:定义当前maven项目隶属的实际项目
- artifactId:定义当前maven项目名称
- version:定义当前项目版本号
配置:1. 本地仓库位置 2. 阿里云镜像仓库
maven工程目录结构
project -> project-java(src、pom.xml) src->(main、test)-> main(java、resources)、test(java、resources)
pom.xml基础格式
pom.xml格式:
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.yuqu</groupId>
<artifactId>project-java</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
控制台命令
mvn compile #编译
mvn clean #清理
mvn test #测试
mvn package #打包
mvn install #安装到本地仓库
在IDEA中创建Maven项目
在maven中创建
- 创建空项目
- 打开settings找到maven进行配置
maven的安装路径选择本地的路径不建议用idea自带的maven
maven配置文件:首先找到解压好的maven文件夹下的conf文件夹
本地仓库位置建议自定义仓库位置,默认是在C盘用户下的 .m2 的文件夹中的repository
然后找到项目设置(module settings)点击project 为项目选定jdk版本
3. 创建空项目完成后,File-> new -> module选择创建maven项目,我使用的是IDEA2022版本会有些不同
我们可以选择创建Java工程或者Web工程,下面我们以Web工程为例看下效果:
这与上文说到的maven标准格式时不符合的所以我们需要对其进行补全
接下来可以将Web项目部署到Tomcat中运行:
部署步骤参考这里
依赖管理
依赖具有传递性
直接依赖:在当前项目中直接配置的依赖关系
间接依赖:下级资源或下级工程所配置的依赖关系,在当前项目中也可以使用
可选依赖:对外隐藏当前所依赖的资源,使用格式是在
< dependency></ dependency >中添加如下:
<optional>true</optional>
<!-- true表示确定对外隐藏 -->
依赖范围:
- 主程序范围有效(main文件夹范围内)
- 测试程序范围内有效(test文件夹范围内)
- 是否参与打包(package指令范围内)
如上图所示,Y代表在该范围内有效