Maven 学习
视频学习:https://www.bilibili.com/video/BV1Fz4y167p5?p=3&spm_id_from=pageDriver
目录- 1. 主要内容
- 2. Maven 的简介
- 2.1 简介
- 2.2 项目创建
- 2.3 项目构建工具
- 2.4 Maven 的四大特性
- 2.4.1 依赖管理系统
- 2.4.2 多模块构建
- 2.4.3 一致的项目结构
- 2.4.4 一致的构建模型和插件机制
- 3. Maven 的安装配置和目录结构
- 3.1 Maven 的安装配置
- 3.1.1 JDK 的版本
- 3.1.2 下载 Maven
- 3.1.3 配置 Maven 环境变量
- 3.1.4 检查 Maven 是否安装成功
- 3.2 Maven 目录结构
- 3.2.1 创建一个文件夹作为项目的根目录
- 3.2.2 编写主函数
- 3.2.3 cmd 下编译并运行
- 3.1 Maven 的安装配置
- 4. Maven 命令
- 4.1 常用命令
- 5. IDEA 编辑器集成 Maven 环境
- 5.1 设置 Maven 版本
- 6. Maven 项目的创建
- 6.1 创建 Java 项目
- 6.1.1 新建项目
- 6.1.2 编译项目
- 6.2 启动 web 项目
- 6.1 创建 Java 项目
- 7. Maven 仓库的基本概念
- 7.1 中央仓库
- 7.2 私服
- 7.3 其他公共库
- 8. Maven 环境下构建多模块项目
- 9. Maven 的打包操作
- 10. Maven 依赖的基本概念
- 10.1 依赖的基本配置
1. 主要内容
2. Maven 的简介
2.1 简介
? Maven 作为 Apache 组织中的一个颇为成功的开源项目,Maven 主要服务于基本 java 平台的项目创建,依赖管理和项目信息管理
2.2 项目创建
? 用软件的方法将繁琐重复的工作进行自动化,使得软件的构建可以像全自动流水线一样,只需要一条简单的命令,就能够自动完成,很快就能得到最终结果
2.3 项目构建工具
? Ant 构建
? 最早的构建工具,基于 IDE,但 XML 脚本编写格式让 XML 文件特别大,对工程构建过程中的过程控制特别好
? Maven
? 项目对象模型,通过其描述信息来管理项目的构建,报告和文档的软件管理工具,它填补了 Ant 缺点,Maven 第一次支持了从网络上下载的功能,仍然采用 xml 作为配置文件格式。Maven 专注的是依赖管理,使用 java 编写
? Gradle
? 结合以上两个的优点,继承了 Ant 的灵活和 Maven 的生命周期管理,最后被 google 作为了 Android 御用管理工具,它最大的区别是不用 XML 作为配置文件格式,采用了 DSL 格式,使得脚本更加简洁
2.4 Maven 的四大特性
2.4.1 依赖管理系统
? 依赖管理系统 jar 包管理,jar 包升级时修改配置文件即可,可用 groupId、artifactId、version 组成的 Coordination(坐标)唯一标识一个依赖。
? 任何基于 Maven 构建的项目自身也必须定义这三项属性,生成的包可以是 jar 包,也可以是 war 包,如下依赖引用:
javax.servlet
javax.servlet-api
3.1.0
坐标属性的理解
? Maven 坐标为各种组件引入了秩序,任何一个组件都必须明确定义自己的坐标
groupId
? 定义当前 Maven 项目隶属的实际项目-公司名称。
artifactId
? 该元素定义实际项目中的一个 Maven 模块-项目名。推荐使用实际项目名称作为 artifactId 的前缀
version
? 该元素定义 Maven 项目当前所处的版本
2.4.2 多模块构建
? 在 Maven 中需要定义一个 parent POM 作为一组 module 的聚合 POM,在该 POM 中可以使用
2.4.3 一致的项目结构
? 制定了一套项目目录结构作为标准的 java 项目结构,解决不同的 IDE 带来的文件目录不一致问题
2.4.4 一致的构建模型和插件机制
3. Maven 的安装配置和目录结构
3.1 Maven 的安装配置
3.1.1 JDK 的版本
? JDK 版本 1.7 及以上版本
3.1.2 下载 Maven
? 下载地址:https://maven.apache.org/download.cgi
3.1.3 配置 Maven 环境变量
- 将解压后的 Maven 的根目录配置到系统环境变量中 MAVEN_HOME
- 把 bin 目录配置到系统变量 path 中
注意:maven 解压后存放的目录不要包含中文和空格
3.1.4 检查 Maven 是否安装成功
? 打开 cmd,执行 mvn -v
3.2 Maven 目录结构
3.2.1 创建一个文件夹作为项目的根目录
? 创建 pom.xml 文件
<?xml version="1.0" encoding="utf-8"?>
4.0.0
com.xxxx
maven
0.0.1-SNAPSHOT
jar
maven
http://maven.apache.org
UTF-8
12
12
12
junit
junit
3.8.1
test
3.2.2 编写主函数
package com.xxxx.demo01
public class Hello {
public static void main(String[] args) {
System.out.println("Hello Maven");
}
}
3.2.3 cmd 下编译并运行
? 进入项目目录,使用 cmd
-
编译 java 文件
mvn complie
-
执行 main 方法
mvn exec:java -Dexec.mainClass="com.xxxx.demo01.Hello"
-
为了更好的下载依赖,可将镜像更改为 阿里镜像,另可修改默认仓库位置
1.1 修改默认仓库位置 maven-->conf-->settings.xmlF:/Java/m2/repository 注意:仓库位置为本机的指定的目录,记得改成 "/" 1.2 更换镜像nexus-aliyun central Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public 编译不成功,可能出现的问题:
-
JDK 环境配置有问题
-
代码编写时,类里面没有设置包名(如果编译时类没加包名,执行时也不需要加包名)
-
报 Fatal error compiling: 错误: 无效的目标发行版:12.0.1 错误
解决:将 版本号改成 12 即可
-
4. Maven 命令
Maven 的命令格式如下:
mvn [plugin-name]:[goal-name]
执行 plugin-name 插件的 goal-name 目标
4.1 常用命令
注意:运行 maven 命令,首先需要定位到 maven 项目的目录,也就是 pox.xml 文件所在的目录,否则,需要通过参数来指定项目的目录
5. IDEA 编辑器集成 Maven 环境
5.1 设置 Maven 版本
选择 File --> Other Settings(全局配置) -- > Settings for New Projects --> 搜索 Maven
- 修改 Maven home directory
- 修改 user settings file
6. Maven 项目的创建
6.1 创建 Java 项目
6.1.1 新建项目
? 选择 File --> New --> Project --> maven --> quickstart
6.1.2 编译项目
? 选择 edit configurations --> + --> maven
6.2 启动 web 项目
-
创建 web 项目与创建 java 项目步骤基本一致,区别在于选择 Maven 模板 (web 项目选择 webapp)
-
修改 JDK 为当前版本
-
添加 web 部署的插件
? 在 build 标签中添加 plugins 标签
? Jetty 插件 和 tomcat 插件
7. Maven 仓库的基本概念
? 对于 Maven 来说,仓库只分为两类:本地仓库和远程仓库
? 当 Maven 根据坐标寻找构件时,会首先查看本地仓库,如果本地仓库存在,则直接使用;如果本地没有,Maven 则会去远程仓库查找,发现需要的构件时之后,下载到本地仓库再使用,如果都没有,则会报错。
? 远程仓库分为三种:中央仓库、私服、其他公共库
? 中央仓库是默认配置下,Maven 下载 jar 包的地方
? 私服是另一种特殊的远程仓库,为了节省带宽和时间,应该在局域网内架设一个私有的仓库服务器,用其代理所有外部的远程仓库。内部的项目还能部署到私服上供其他项目使用。
? 在 Maven 项目目录下,没有诸如 libs/ 这样用来存放依赖文件的目录。当 Maven 在执行编译或测试时,如果需要使用依赖文件,它总是基于坐标使用本地仓库的依赖文件。
? 默认情况下,每个用户在自己的用户目录下都有一个路径名 .m2/repository/ 的仓库目录,此仓库默认在 c 盘,可通过 maven 配置文件 conf 目录下 settings.xml 来指定仓库路径
7.1 中央仓库
? 默认的远程仓库
7.2 私服
? 私服是一个特殊的远程仓库,假设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 maven 用户使用,当 maven 需要下载构件时,它去私服当中找,如果私服没有,则从外部远程仓库下载,并缓存在私服上,再为 maven 提供。
7.3 其他公共库
? 常用的阿里云仓库配置
nexus-aliyun
Nexus aliyun
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public
8. Maven 环境下构建多模块项目
? 使用 maven 提供的多模块构建的特性完成 maven 环境下多个模块的项目的管理与构建
- 模块 maven_parent -- 基模块(pom)
- 模块 maven_dao -- 数据库的访问层,如 jdbc 操作 (jar)
- 模块 maven_service -- 项目的业务逻辑层 (jar)
- 模块 maven_controller -- 用来接收请求,相应数据 (war)
9. Maven 的打包操作
- 建立对应的目录结构
- 添加 Profile 配置
- 设置资源文件配置
- 执行打包操作
10. Maven 依赖的基本概念
10.1 依赖的基本配置
? 根元素 project 下的 dependencies 可以包含多个 dependence 元素,以声明多个依赖。
? 每个依赖应该包含以下元素:
- groupId,artifactId,version:依赖的基本坐标
- Type:依赖的类型,大部分情况下不需要声明。默认值为 jar
- Scope:依赖范围
- Optional:标记依赖是否可选
- Exclusion:用来排除传递性依赖