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 下编译并运行
  • 4. Maven 命令
    • 4.1 常用命令
  • 5. IDEA 编辑器集成 Maven 环境
    • 5.1 设置 Maven 版本
  • 6. Maven 项目的创建
    • 6.1 创建 Java 项目
      • 6.1.1 新建项目
      • 6.1.2 编译项目
    • 6.2 启动 web 项目
  • 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 中可以使用 标签来定义一组子模块,parent POM 不会有什么实际构建产出,而 parent POM 中的 build 配置以及依赖配置都会自动继承给子 module

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

  1. 编译 java 文件

    mvn complie

  2. 执行 main 方法

    mvn exec:java -Dexec.mainClass="com.xxxx.demo01.Hello"

  3. 为了更好的下载依赖,可将镜像更改为 阿里镜像,另可修改默认仓库位置

    1.1 修改默认仓库位置
    maven-->conf-->settings.xml
    F:/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 项目

  1. 创建 web 项目与创建 java 项目步骤基本一致,区别在于选择 Maven 模板 (web 项目选择 webapp)

  2. 修改 JDK 为当前版本

  3. 添加 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 元素,以声明多个依赖。

? 每个依赖应该包含以下元素:

  1. groupId,artifactId,version:依赖的基本坐标
  2. Type:依赖的类型,大部分情况下不需要声明。默认值为 jar
  3. Scope:依赖范围
  4. Optional:标记依赖是否可选
  5. Exclusion:用来排除传递性依赖