1. Maven
1.1 应用场景:
本地仓库: 我们使用的jar依赖于maven的本地仓库
自动部署: 本地仓库推送到远程仓库,
- 远程库通知 Jenkins工具,
- Jenkins 调用Maven构建war包,
- Jenkins 再调用准备好的脚本程序,将war包部署到docker容器中。当有多个docker容器后,就可以使用kubernetes进行管理,形成云原生
私有仓库: 可以将数据发布到 Nexus 私服中。谁需要就可以通过 Nexus 私服来获取数据
1.2 哪些人需要这门课?
小白: 快速入门
普通开发人员: 开发项目
资深开发人员: 考虑到 jar 包冲突等棘手问题还是需要精通Maven
1.3 三大学习流程:
1.3.1 先学会再说
- 最小必要知识
- 快速上手,学完就能用
- 简单粗暴
1.3.2 Maven 环境开发全流程掌握
- 基于 JavaWeb 案例使用Maven实现: 搭建环境、功能开发、应用部署
- 基于 SSM 案例使用Maven实现: 搭建环境、功能开发、应用部署
- 基于 SpringBoot、SpringCloud 微服务案例使用Maven实现: 搭建环境、功能开发、应用部署
1.3.3 Maven 技术体系全面覆盖
1.3.3.1 理论:
- 声明周期体系:
- 声明周期阶段
- 插件和目标
- Mojo 开发与配置
- POM 体系:
- 四层 POM
- dependency 标签详解
- build 标签详解
- profile 标签详解
- 属性系统:
- java 系统属性
- 系统环境变量
- project 属性
- settings 属性
- 自定义属性
1.3.3.2 操作:
- Nexus 私服:
- 搭建
- 启动和初始化
- 下载 jar 包
- 发布 jar 包
- 引用 jar 包
- jar 冲突:
- Maven 插件检测
- IDEA 插件检测
- 体系外 jar 包导入:
- 场景描述
- 解决方法
2. 为什么要学习Maven?
2.1 Maven 作为依赖管理工具
2.1.1 jar 包的规模
随着我们使用越来越多的框架,或者框架封装程度越来越高,项目中使用的jar包越来越多,项目中,一个模块里面用到上百个jar包是非常正常的
例如下面的例子:我们只用到了 SpringBoot、Springcloud 框架中的三个功能:
- Nacos 服务注册发现
- Web 框架环境
- 图模板技术 Thymeleaf
最终却导入106个 jar 包!
但如果使用Maven来引入这些 jar 包只需要配置三个依赖
2.1.2 jar 包的来源:
jar包所属技术的官网通常是英文界面,网站的结构又不尽相同,甚至找到下载链接还发现需要通过特殊的工具下载
第三方网站提供下载。问题是不规范,在使用过程中会出现各种问题:
- jar包的名称
- jar包的版本
- jar包内的具体细节:类名不同,方法不存在等
而使用Maven 后,依赖对应的jar包能够自动下载,方便、快捷又规范
2.1.3 jar 包之间的依赖关系
框架中使用的jar包,不仅数量庞大,而且彼此之间存在错综复杂的依赖管理。依赖关系的复杂程度,已经上升到了完全不能靠人力手动解决的程度。另外,jar之间有可能产生冲突,进一步增加我们在 jar 包使用过程中的难度
3. Maven 作为构建管理工具
3.1 你没有注意过的构建
你可以不使用 Maven,但是构建必须要做。当我们使用IDEA开发时,构建是 IDEA 替我们做的。
3.2 脱离 IDE 环境仍需构建
3.3 结论
- 管理规模庞大的 jar 包,需要专门工具
- 脱离 IDE 环境执行构建操作,需要专门工具
4. Maven是什么?
Maven 是 Apache 软件基金会组织推虎的一款专门为 java 项目提供构建和依赖管理支持的工具
4.1 构建
java 项目开发过程中,构建指的是使用【原材料生产产品】的过程
- 原材料:
- java 源代码
- 基于 HTML 和 Thymeleaf 文件
- 图片
- 配置文件
- …
- 产品:
- 一个可以在服务器上运行的项目
构建过程包含的主要的环节:
- 清理: 删除上一次构建的结果,为下一次构建做好准备
- 编译: java 源程序编译成 *.class 字节码文件
- 测试: 运行提前准备好的测试程序
- 报告: 针对刚才测试的结果生成一个全面的信息
- 打包:
- java工程:jar 包
- Web工程:war包
- 安装: 把一个 Maven 工程经过打包操作生成的 jar 包或 war 包安装到 Maven 仓库
- 部署: 将准备好的 jar 包或 war 包部署到服务器上运行
- 部署 jar 包:把一个 jar 包部署到 Nexus 私服服务器上
- 部署 war 包:借助相关 Maven 插件(例如 cargo),将 war 包部署到 Tomcat 服务器上
4.2 依赖
如果 A 工程里面用到了 B 工程的类、接口、配置文件等等这样的资源,那么我们就可以说 A 依赖 B。例如:
- junit-4.12 依赖 hamcrest-core-1.3
依赖管理中要解决的具体问题:
- jar 包的下载:使用 Maven 之后,jar 包会从规范的远程仓库下载到本地
- jar 包之间的依赖:通过依赖的传递性自动完成
- jar 包之间的冲突:通过对依赖的配置进行跳转,让某些 jar 包不会被导入
4.3 Maven 的工作机制
5. 核心程序的安装
5.1 Maven 官网地址
首页:
Maven – Welcome to Apache Maven
下载地址:
Maven – Download Apache Maven
6. 解压Maven核心程序
核心程序压缩包:apache-maven-3.8.6-bin.zip,加压到非中文、没有空格的目录。
在解压目录中,我们需要着重关注Maven的核心配置文件:conf/settings.xml
7. 指定本地仓库
默认仓库为:Default: ${user.home}/.m2/repository
由于本地仓库的默认位置是在用户的家目录下,而家目录往往是在 C 盘。
将来Maven仓库中 jar 包越来越多,仓库体积越来越大,可能会拖慢 C 盘的运行速度,影响系统性能。所以建议将 Maven 的本地仓库放在其他盘符下。配置方式如下:
<!--更改 Maven 的settings.xml文件,添加该标签指定保存的路径-->
<!--配置本地仓库-->
<localRepository>D:\JavaStorage:\maven-repo</localRepository>
记住: 一定要手动创建 <localrepository> 标签并配置地址
注意: 本地仓库本身也需要使用一个非中文、没有空格的目录!
8. 配置阿里云提供的镜像仓库
Maven 下载 jar 包默认访问境外的中央仓库,而国外网站速度很慢。改成阿里云提供的镜像仓库,访问国内网站,可以让 Maven 下载 jar 包的时候速度更快。配置的方式如下:
8.1 原有配置
<mirrors>
<mirror>
<id>maven-default-http-blocker</id>
<mirrorOf>external:http:*</mirrorOf>
<name>
Pseudo repository to mirror external repositories initially using HTTP.</name>
<url>http://0.0.0.0/</url>
<blocked>true</blocked>
</mirror>
</mirrors>
8.2 加入我们的配置
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<blocked>true</blocked>
</mirror>
9. 配置 Maven 工程的基础 JDK 版本
如果按照默认配置运行,Java 工程使用的默认 JDK 版本是 1.5 ,而我们熟悉和常用的是 JDK 1.8 版本。
- 找到 settings.xml 配置文件,在 profiles 标签中添加如下标签组
修改配置方式如下:
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
</properties>
</profile>
10. 配置环境变量
Maven 是一个用 Java 语言开发的程序,它必须基于 JDK 来运行,需要通过 JAVA_HOME 来找到 JDK 的安装位置。
10.1 配置 MAVEN_HOME
配置环境变量的规律:
- XXX_HOME 通常指向的是 bin 目录的上一级
- PATH 指向的是 bin 目录
10.2 配置PATH
编辑 Path 变量,添加变量。具体操作见图:
11. 测试
打开cmd命令行,输入
mvn -version
如果出来maven相关的版本信息,那么也就代表maven环境安装成功了。