文章目录
参考资料
运行环境
- Maven3.8
- JDK8
- IDEA 2021.1 专业版
一、Maven概述
1.1 简介
传统Java开发局限性
-
新建每个项目都要手动导入JAR包
Jar包之间可能相互依赖
Jar包之间可能相互冲突
每个项目都要导包,几遍是同类型的项目 -
项目层面
一个大型项目可能需要分成多个模块,模块之间如何协调和访问
打包麻烦
Maven是一款自动化构建工具,专注服务于Java平台的项目构建和依赖管理
常见的项目构建工具除了Maven还有:Make、Ant、Gradle
目前,Maven最常用,而Gradle逐渐流行起来
1.2 作用
Maven 统一集中管理好所有的依赖包,不需要程序员再去寻找。
对应第三方组件用到的共同 jar,Maven 自动解决重复和冲突问题。
Maven 作为一个开放的架构,提供了公共接口,方便同第三方插件集成。程序员可以将自己需要的插件,动态地集成到 Maven,从而扩展新的管理功能。
Maven 可以统一每个项目的构建过程,实现不同项目的兼容性管理。
Maven支持自动构建,包括构建,编译、测试、运行、打包、安装、部署六个环节
1.3 原理
Maven项目依赖的环境(Jar)包都在仓库中(Ant项目依赖的jar包需要手动导入),依赖不是导入
中央仓库,管理者全部Java产品的Jar包
默认:https://repo1.maven.org/maven2/
镜像
本地仓库:项目依赖的库
当我们从maven中获取jar包的时候,maven首先会在本地仓库中查找,若本地仓库有则返回,如果没有则从中央仓库中获取包,并在本地库中保存
二、Maven相关概念
2.1 pom.xml的由来
pom
其实是 Project Object Model
的缩写,即项目对象模型。
作用:将Java工程的相关信息封装成对象作为便于操作和管理的模型。
Maven工程的核心配置就是通过该文件的
现 JavaEE开发领域普遍认同的观点: 约定 > 配置 > 编码
,意思是能用配置解决的问题就不编码,能基于约定的就不配置,而Maven正是因为指定了、约定了文件保存的目录才能够对Java工程进行自动化构建。
2.2 GAV坐标
在pom.xml中,通常使用如下三个向量在Maven的仓库中唯一标识一个Maven工程
向量名称 | 作用描述 |
---|---|
groupId | 公司或组织的域名倒序+当前项目名称,比如:com.uni.hello |
artifactId | 当前项目的模块名称 |
version | 当前模块的版本,默认为1.0-SNAPSHOT,意为开发中的1.0版本 |
如何通过坐标在本地仓库查找jar包?
将GAV三个坐标按序连接,到仓库中查找,比如 com/uni/hello/1.0-SNAPSHOP.jar
注:自己的 Maven工程必须执行安装操作才会进入到本地仓库,安装的命令是 mvn install
2.3 构建和自动化构建
以Web工程为例:
- 通过浏览器访问Java程序时就必须将包含Java程序的Web工程编译的结果"拿" 到服务器上的指定目录下,并启动服务器才行。这个“拿”的过程称为
部署
。 - Web工程中除了Java程序和JSP/HTML页面、图片等静态资源外,还包括第三方框架的jar包以及各种各样的配置文件。所有的这些资源都必须按照正确的目录结构部署到服务器上,项目才可以正常运行。
构建 就是以我们编写的Java代码、配置框架文件、国际化等其他资源文件、JSP页面和图片等静态资源作为“原材料”,去“生产”出一个可运行项目的过程。
项目构建所需要的环节主要有六个,分别是:
清理 -> 编译 -> 测试 -> 报告 -> 打包 -> 部署
显然,如果手动的构建一个项目,还是比较麻烦的。
而Maven则支持自动化构建,其本质是:可以自动将上述构建过程从起点一直执行到终点
比如:mvn install
命令,(在工程POM文件所在位置)
它的租用是在本地仓库生成当前项目的jar包,其他项目就可以直接依赖这个jar包。
Maven常见命令以及说明
Maven命令 | 作用描述 |
---|---|
mvn clean | 清理,将以前编译得到的旧的 class 字节码文件删除 |
mvn compile | 编译,将Java 源程序编译成 class 字节码文件。 |
mvn test | 测试,并生成测试报告 |
mvn package | 动态 web工程打 war包,Java工程打 jar 包。 |
mvn install | 将项目生成 jar 包放在仓库中,以便别的模块调用 |
… | … |
如何使用这些命令?
首先要记住一点,mvn命令需要在有pom.xml
的文件位置里执行,所以一般在IDEA里可以直接进行Maven的操作。
其次,如果想通过命令行执行Maven命令记得配置环境变量,和JDK环境变量配置一样,先配置MAVEN_HOME指定Maven的路径,然后在系统变量Path里添加MAVEN_HOME/bin
,因为可执行的脚本mvn就是在这个路径中的,配置过后在任何位置都可以使用mvn命令了,不过在打包的时候记得要在pom.xml所在的目录下。
IDEA集成了Maven的环境,自带Mavne管理的插件,所以不需要去手动输入这些命令
IDEA提供的Maven插件通常在右侧的工具栏中,可以看到它提供了所有的生命周期,若想执行哪一个,双击即可
2.4 项目关系
继承关系: Maven项目,是在pom.xml文件中加入依赖关系,其中的标签<dependency>
则可以把其他项目的jar引入到当前的项目。或者是自动引入其他项目所依赖的另外项目
聚合关系: 大项目分成几个模块项目,一般有一个统一的父项目领导。
- 父项目是
pom
类型 - 子项目为
jar
或者war
,若子项目还是其他项目的父项目,那么该子项目也可一定是pom类型 - 有继承关系后,子项目中会出现
<parent>
标签。若果子项目的<groupId>
和<version>
和父项目相同,那么在子项目中可以不配置这两个标签 - 继承关系 父项目 pom.xml中是看不到有哪些子项目的,在逻辑上具有父子项目关系
- 聚合关系 可以清楚的知道有哪些子项目,通过
<modules>
标签
聚合配置的优势:
可以方便的将子项目发布到不同的服务器上、并配置服务器,这样与本地安装的服务器就没有关系了,比如:
2.5 统一管理目标JAR包的版本
案例:要引入Spring框架的部分Jar包,可以在pom.xml中进行如下配置
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=