文章目录
- 1. 前言
- 2. Maven 快速入门
- 2.1 Maven 项目模型
- 2.2 Maven 仓库
- 3. Maven的安装配置
- 3.1 安装
- 3.2 配置环境变量
- 3.4 Maven 配置
- 4. Maven 的常用命令
- 4.1 编译
- 4.2 清理
- 4.3 打包
- 4.4 测试
- 4.5 安装
- 5. Maven生命周期
- 6. 总结
- Java编程基础教程系列:
1. 前言
在 Java 开发中,Maven 是一个十分重要的工具,专门用于 Java 代码的管理和构建。Maven 的主要功能有:
- 标准化的项目结构
- 标准化项目构建流程
- 提供依赖管理机制
在我们之前编写代码时,由于不同的 IDE 构建出来的项目结构是不同的,导致在不同的开发环境中编写的 Java 代码无法互通,例如在 idea 中编写的代码不能很好的导入 eclipse 中,导致了很多不便的问题,而 Maven 提供了一套标准的项目结构
,使用不同的开发环境构建出来的项目结构是相同的,这样,以后不管使用哪个 IDE,创建的项目都是互通的,导入时可以很好的兼容。
如上图就是 Maven 构建的普通 Java 项目的结构,从上到下依次表示的是项目名称,源代码和测试代码的目录 src ,源代码目录,源代码 Java 文件目录,源代码配置文件目录,测试代码目录,测试代码 Java 文件目录,测试代码配置文件目录和项目的核心配置文件 pom.xml 。
一个完整项目开发必须经过编译,测试,打包和运行等这样的标准化项目构建流程。在一个大型项目中,这些流程不经过简化的操作是十分繁琐的,而 Maven 提供了一套简单命令来完成项目的构建
,例如使用 package 命令来打包项目,使用Maven 让项目流程的构建不再困难。
在之前使用 JDBC 操作 MySQL 数据库时,我们必须往项目中导入 MySQL 的驱动 jar 包,当项目的依赖过多时,我们经过下载导入等操作的代价是十分大的,而 Maven 提供了一套标准化的依赖管理机制
,用于管理项目中所依赖的第三方资源,例如驱动 jar 包,插件等等,大大提高了开发的效率,我们只需要使用标准的坐标信息来管理各种依赖,而引入的第三方资源存放在 Maven 仓库中,Maven 中的仓库主要分为本地仓库,中央仓库,远程仓库。
市面上存在众多的项目构建工具,为什么选择 Maven 呢?一个重要的原因是 Maven 作为一款主流的项目构建工具,超过了一半的人在使用。
2. Maven 快速入门
Apache Maven 是一个项目管理和构建的工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建,报告和文档。
2.1 Maven 项目模型
在构建生命周期阶段,通过不同的插件来完成不同的功能,例如,使用打包的插件来打包项目,通过这些插件来完成项目的标准化项目构建流程。项目对象模型是指 Maven 使用简短的描述信息来描述使用 Maven 构建的项目,每个不同的项目都有一个唯一标识,使用标准坐标来实现,坐标引入的第三方资源都放在仓库中。如下图:
2.2 Maven 仓库
Maven 中仓库主要有三类:
- 本地仓库:本地计算机上的目录
- 中央仓库:由 Maven 团队维护的全球唯一的仓库
- 远程仓库:又称为私服,一般由公司团队搭建
那么 Maven 中的仓库有什么作用呢?
例如,当项目中使用坐标引入了对应的依赖 jar包时,首先会在本地仓库中查找是否有对应的 jar 包,有则直接引入,如果没有,则需要在中央仓库中寻找并下载 对应的 jar 包到本地仓库,下一次使用时直接从本地仓库引入。
当团队搭建了私服(远程仓库)时,如果本地仓库中没有对应的驱动 jar 包,则会在私服中寻找,如果还是没有,则在中央仓库中下载对用的 jar 包到私服,并存入到本地仓库中,用于引入到项目中,如果有,直接从私服下载对应的 jar 包到中央仓库。但是,一般私服在搭建时,都会同步中央仓库中的依赖,这样就很好的提高了仓库的访问速度,毕竟国外网站的访问速度一言难尽。
我们后面安装好 Maven 后,就要来使用阿里云的私服,提升访问速度。
3. Maven的安装配置
3.1 安装
Maven 是一款绿色软件,直接在官网下载解压即为安装成功,并且建议解压到一个没有中文和特殊字符的路径下。
项目结果如下图,bin 目录下存放的是二进制可执行文件,conf 中存放 Maven 的配置文件,lib 目录下存放 Maven 自身依赖的 jar 包,这里存放的并不是项目使用的 jar 包,可以看出 Maven 自身也是使用 Java 开发的。
3.2 配置环境变量
和 Java 配置环境变量相同,Maven 也要配置环境变量,保证我们在任何文件目录下都可以访问 Maven 的可执行文件,Maven 配置环境变量主要是添加MAVEN_HOME,并且将其 bin 目录添加到系统环境变量中。
第一步:右键此电脑 / 属性 / 高级系统设置 / 环境变量 / 添加
变量名:MAVEN_HOME
变量值:G:\software\apache-maven-3.6.1//Maven的安装路径
如图:
第二步:双击系统变量 Path,将 %MAVEN_HOME%bin
添加到变量值中。
如图:
第三步:验证环境变量是否配置成功,在 cmd 中执行命令 mvn -version
,如果执行成功,则环境变量配置成功。
3.4 Maven 配置
配置本地仓库:
修改 conf / settings.xml 中的 <localRepository>
标签内容为一个指定目录作为本地仓库,用来存储 jar 包。建议在 Maven 安装路径下新建一个文件夹配置为本地仓库,方便后期的维护。
如图:
配置阿里云私服:
中央仓库在国外,所以下载 jar 包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的 jar 包。
修改 conf / settings.xml 中的 <mirrors>
标签内容,为其添加如下子标签:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
如图:
4. Maven 的常用命令
Maven 中的常用命令主要有:
- compile:编译
- clean:清理
- test:测试
- package:打包
- install:安装
下面对常用命令的使用做一个入门级别的演示,演示使用下面这个简单的 Java 项目。
在执行 Maven 的命令时需要进入到项目中 pom.xml 文件所在的目录,可以在该路径下快速打开命令提示符。
4.1 编译
执行命令:
mvn compile
此时可以看到,本地仓库中从阿里云私服下载了编译需要的插件,同时在项目下生成 target 目录,如图:
经过编译的字节码文件就放在其中,如图:
4.2 清理
执行命令:
mvn clean
此时可以看到,从阿里云下载的插件被清理,同样项目下的 target 目录也被删除,如图:
4.3 打包
执行命令:
mvn package
此时可以看到,从阿里云私服下载了对应的插件,在项目中生成了 target 目录,并且在 target 目录下将当前项目打包为 jar 包,如图:
4.4 测试
执行命令:
mvn test
此时可以看到,程序中的测试代码被执行,如上图。测试中的代码采用单元测试:
package org.chengzi;
import org.junit.jupiter.api.Test;
public class HelloWorldTest {
@Test
public void test() {
System.out.println("HelloWorld Test");
}
}
4.5 安装
执行命令:
mvn install
该命令会将当前 Java 项目打成 jar 包,并安装到本地仓库中,执行完上述命令后本地仓库已经有该项目的 jar包,如图:
5. Maven生命周期
Maven 生命周期指的是在构建项目时一次构建经历的事件。Maven 划分了3套生命周期:
- clean:清理
- default:核心工作,例如编译测试打包安装等
- site:产生报告,发布站点等
同一套生命周期内,执行后面的命令,前面的所有命令会自动执行,例如:
在执行 install 命令时,首先会执行前面的 compile ,test ,package 命令。在 Maven 生命周期的构建中还有很多默认的命令,这里只是列出来几个最常使用的命令。
6. 总结
初学者在这部分一定会遇到各种各样的问题,其中大部分都是由于版本问题造成的,例如 JDK 版本,idea 版本,Maven 版本等。建议多尝试几遍就能熟练,遇到问题一定要及时解决。
例如小编曾经在这部分就遇到各种当时水平难以处理的问题,项目中无法生成 src 源代码目录,idea 中报错不支持该版本,Maven 中报错不支持源选项等各种问题。不要放弃,多尝试问题总会解决。另外 Java 版本建议使用 JDK 1.8。
本节详细探讨了 Maven 构建 Java 项目的流程以及构建项目生命周期中使用的各种命令,我们下期见。
Java编程基础教程系列:
JDBC快速入门,如何使用JDBC操作数据库?
如何使用JDBC操作数据库?JDBC API的使用详细解读
什么是数据库连接池?Druid(德鲁伊)连接池的使用详细解读