Maven入门笔记

99 阅读6分钟

前言

Maven入门,把学习过程做个记录。

正文

一.Maven简介

1.1Maven是什么?

Maven简单翻译为"内行","专家",是Apache的一个Java开发的开源项目,是一个项目管理工具.Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档项目管理工具软件。

1.2Maven主要功能

  • 提供了一套标准化的项目结构
  • 提供了一套标准化的构建流程(编译,测试,打包,发布……);
  • 提供了一套依赖管理机制。

1.3Maven核心

  • 依赖管理: 对 jar 的统一管理(Maven 提供了一个 Maven 的中央仓库,当我们在项目中添加完会自动去中央仓库下载相关的依赖,并且解决依赖的依赖问题)
  • 项目构建: 对项目进行编译、测试、打包、部署、上传到私服等

Maven.pom.model

二.Maven安装和使用

2.1 Maven下载,安装

* 下载
        Maven官网下载: https://maven.apache.org/download.cgi
* 安装
        解压即可运行
* 目录
        bin:存放Maven的命令
        boot: 存放Maven的引导程序,如类加载器
        conf: 存放了Maven的一些配置文件,如setting.xml文件
        lib: jar包
* 环境变量:
        MAVEN_HOME: maven安装目录
        path: %MAVEN_HOME%\bin
* 验证:
        CMD中输入mvn --version
        ** 
            Apache Maven 3.8.6 (84538c9988a25aec085021c365c560670ad80f63)
            Maven home: D:\APP\apache-maven-3.8.6-bin\apache-maven-3.8.6
        **

2.2.Maven仓库

2.2.1仓库类型与配置

  • 本地仓库 默认情况下,每个本地计算机的用户目录下都有一个路径名为.m2/repository/的仓库目录,这个就是本地的仓库,也可以在 settings.xml 文件配置本地仓库的路径.

    <!-- 本地仓库 -->
      <localRepository>D:\APP\apache-maven-3.8.6-bin\repositoryre\repository_boot</localRepository>
    
  • 远程仓库 远程仓库也称为私服,由公司或者项目组维护,是开发人员自己定义的远程仓库,其中包含项目所需要的库或其他的jar包,可以通过标签来制定远程仓库地址.

     <!-- settings.xml 中配置镜像仓库 -->
     <mirrors>
        <!-- 阿里云仓库 -->
        <mirror>
            <id>all</id>
            <mirrorOf>all</mirrorOf>
            <name>aliyun maven</name>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
        </mirror>
    ​
        <!-- 中央仓库1 -->
        <mirror>
            <id>repo1</id>
            <mirrorOf>all</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo1.maven.org/maven2/</url>
        </mirror>
    ​
        <!-- 中央仓库2 -->
        <mirror>
            <id>repo2</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo2.maven.org/maven2/</url>
        </mirror>
      </mirrors> 
    
  • 中央仓库是Maven社区提供的仓库。它包含大量常用的库。当 Maven 在本地存储库中找不到任何依赖项时,就会从中央仓库中搜索.

2.2.2 仓库加载顺序

第 1 步- 在本地存储库中搜索依赖项,如果未找到,则转到第 2 步,否则执行进一步处理.

第 2 步- 如果没有提到远程存储库,则跳转到第 3 步.在一个或多个远程存储库中搜索依赖项,如果找到则将其下载到本地存储库以供将来参考.

第 3 步- 在中央存储库中搜索依赖项,将其下载到本地存储库以供将来参考。如果未找到 Maven 只是停止处理并抛出错误(无法找到依赖项).

2.2.3 Maven工程结构

image-20230206103443607

三.Maven生命周期和插件

3.1 Maven常用命令和插件

  • clean: Maven清理命令, 执行clean会删除target目录及其内容

    mvn clean
    
  • validate: 检查项目的正确性.

  • compile: Maven编译命令,将src/main/java下的文件编译为class文件输出到target目录下.

  • test: Maven测试命令,执行src/test/java的单元测试类,并编译为class文件.

  • package Maven打包命令,对java工程会打包为jar包,web工程打包为war包.

  • integration-test: 执行额外的测试,这需要打包.

  • verify: 检查包是否有效.

  • install: Maven安装命令,将Maven工程打包为jar包或者war包,并发布到本地仓库.

  • deploy: Maven工程部署命令,将jar包或war包部署到私服中.

3.2 Maven生命周期

Maven对项目的构建过程分为"三套相互独立的"生命周期:

1.Clean Lifecycle(清理生命周期):
        构建之前的清理工作
        命令: clean
        
2.Default Lifecycle(默认生命周期):
        构建的核心部分,编译,测试,打包,部署等等(
        命令: compile test package install deploy
        
3.Site Lifecycle(站点生命周期):
        生成项目报告,发布站点
        命令: site

四.IDEA创建Maven工程

4.1 IDEA配置本地Maven环境

image-20230205150136068

4.2IDEA创建工程

  • 新建项目

image-20230205151208484

  • 创建后,新建 src/main/java src/main/resources src/test/java src/test/resources

image-20230205151312457

  • 添加web模块并使用 JBLTOWEB转换为WEB工程

    image-20230205163945365

4.3 发布web工程

image-20230205204926123

4.4 依赖范围

依赖范围描述
compile编译依赖范围,scope 元素的缺省值。使用此依赖范围的 Maven 依赖,对于三种 classpath 均有效,即该 Maven 依赖在上述三种 classpath 均会被引入。例如,log4j 在编译、测试、运行过程都是必须的。
test测试依赖范围。使用此依赖范围的 Maven 依赖,只对测试 classpath 有效。例如,Junit 依赖只有在测试阶段才需要。
provided已提供依赖范围。使用此依赖范围的 Maven 依赖,只对编译 classpath 和测试 classpath 有效。例如,servlet-api 依赖对于编译、测试阶段而言是需要的,但是运行阶段,由于外部容器已经提供,故不需要 Maven 重复引入该依赖。
runtime运行时依赖范围。使用此依赖范围的 Maven 依赖,只对测试 classpath、运行 classpath 有效。例如,JDBC 驱动实现依赖,其在编译时只需 JDK 提供的 JDBC 接口即可,只有测试、运行阶段才需要实现了 JDBC 接口的驱动。
system系统依赖范围,其效果与 provided 的依赖范围一致。其用于添加非 Maven 仓库的本地依赖,通过依赖元素 dependency 中的 systemPath 元素指定本地依赖的路径。鉴于使用其会导致项目的可移植性降低,一般不推荐使用。
import导入依赖范围,该依赖范围只能与 dependencyManagement 元素配合使用,其功能是将目标 pom.xml 文件中 dependencyManagement 的配置导入合并到当前 pom.xml 的 dependencyManagement 中。

依赖范围与三种 classpath 的关系一览表,如下所示。

依赖范围编译 classpath测试 classpath运行 classpath例子
compilelog4j
test--junit
provided-servlet-api
runtime--JDBC-driver
system-非 Maven 仓库的本地依赖

五. Maven的依赖传递

Maven 的依赖传递机制是指:不管 Maven 项目存在多少间接依赖,POM 中都只需要定义其直接依赖,不必定义任何间接依赖,Maven 会动读取当前项目各个直接依赖的 POM,将那些必要的间接依赖以传递性依赖的形式引入到当前项目中。Maven 的依赖传递机制能够帮助用户一定程度上简化 POM 的配置。

总结

通过以上的学习基本上就可以上手Maven了.