Maven知识学习总结

前言

本文记录对maven的概述、POM、生命周期、配置文件、仓储等记录。

一、Maven 是什么?

Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。
在有多个开发团队环境的情况下,Maven 能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可复用,在创建报告、检查、构建和测试自动配置时,Maven 可以让开发者的工作变得更简单。

  • 遵循原则:约定优于配置
    Maven 使用约定而不是配置,意味着开发者不需要再自己创建构建过程。开发者只需要合理的放置文件,而在 pom.xml 中不再需要定义任何配置。
    资源文件的默认配置,和其他一些配置。 ${basedir} 表示工程目录:
配置项默认值
项目源码${basedir}/src/main/java
项目资源配置${basedir}/src/main/resources
项目测试相关${basedir}/src/test
编译生成相关信息${basedir}/target

二、Maven环境变量

  1. maven是一个基于 Java 的工具,所以要做的第一件事情就是安装 JDK。
  2. http://maven.apache.org/docs/history.html,可以从maven官网上下载需要的maven版本,并配置maven环境变量。mvn -version验证。

三、Maven-POM

POM是项目对象模型(Project Object Model)的简称。它是使用Maven工作时的基本组建,是一个xml文件。它被放在工程根目录下,文件命名为pom.xml。

需要说明的是每个工程应该只有一个 POM 文件。

  • 所有的 POM 文件需要 project 元素和三个必须的字段:groupId, artifactId,version。
  • 在仓库中的工程标识为 groupId:artifactId:version。
  • POM.xml 的根元素是project,它有三个主要的子节点:
    groupId:项目组标识;
    artifactId:项目标识;
    version:项目版本号;

以一个pom为例:

  • project–项目根元素。
  • modelVersion–项目模型,目前始终都是4.0.0,因为没有别的版本。
  • parent–父节点
  • groupId–项目组标识
  • artifactId–项目标识
  • version–项目版本号
  • name–项目名称
  • description–项目描述
  • properties–项目属性
  • dependencies–项目依赖
  • build–项目编译以及打包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.example</groupId>
  <artifactId>demo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>demo</name>
  <description>Demo project for Spring Boot</description>
  <properties>
    <java.version>11</java.version>
    <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-oauth2</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.junit.vintage</groupId>
          <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

四、Maven-构建生命周期

什么是构建生命周期

构建生命周期是一组阶段的序列,每个阶段定义了目标被执行的顺序。这里的阶段是生命周期的一部分。

  • 一个典型的 Maven 构建生命周期是由以下几个阶段的序列组成的:
阶段处理描述
prepare-resources资源拷贝本阶段可以自定义需要拷贝的资源
compile编译本阶段完成源代码编译
package打包本阶段根据 pom.xml 中描述的打包配置创建 JAR / WAR 包
install安装本阶段在本地 / 远程仓库中安装工程包

当需要在某个特定阶段之前或之后执行目标时,可以使用 pre 和 post 来定义这个目标。

当 Maven 开始构建工程,会按照所定义的阶段序列的顺序执行每个阶段注册的目标。Maven 有以下三个标准的生命周期:
clean->default(or build)->site.

Clean 生命周期

当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下阶段:

  • pre-clean
  • clean
  • post-clean

Default (or Build) 生命周期

这是 Maven 的主要生命周期,被用于构建应用。包括下面的 23 个阶段.

生命周期阶段描述
validate检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。
initialize初始化构建状态,例如设置属性。
generate-sources生成编译阶段需要包含的任何源码文件。
process-sources处理源代码,例如,过滤任何值(filter any value)。
generate-resources生成工程包中需要包含的资源文件。
process-resources拷贝和处理资源文件到目的目录中,为打包阶段做准备。
compile编译工程源码。
process-classes处理编译生成的文件,例如 Java Class 字节码的加强和优化。
generate-test-sources生成编译阶段需要包含的任何测试源代码。
process-test-sources处理测试源代码,例如,过滤任何值(filter any values)。
test-compile编译测试源代码到测试目的目录。
process-test-classes处理测试代码文件编译后生成的文件。
test使用适当的单元测试框架(例如JUnit)运行测试。
prepare-package在真正打包之前,为准备打包执行任何必要的操作。
package获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。
pre-integration-test在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。
integration-test处理和部署必须的工程包到集成测试能够运行的环境中。
post-integration-test在集成测试被执行后执行必要的操作。例如,清理环境。
verify运行检查操作来验证工程包是有效的,并满足质量要求。
install安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。
deploy拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程。

当一个阶段通过 Maven 命令调用时,例如 mvn compile,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。

Site 生命周期

Maven Site 插件一般用来创建新的报告文档、部署站点等。,
目前接触的生产项目很少用到,不予了解。

五、Maven - 仓库

什么是 Maven 仓库?

仓库是一个位置,例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工程指定的文件。
分为三个类型:

  • 本地(local)
  • 中央(central)
  • 远程(remote)

本地仓库

  • Maven 本地仓库是机器上的一个文件夹。它在你第一次运行任何 maven 命令的时候创建。

  • Maven 本地仓库保存你的工程的所有依赖(library jar、plugin jar 等)。当你运行一次 Maven 构建,Maven 会自动下载所有依赖的 jar 文件到本地仓库中。它避免了每次构建时都引用存放在远程机器上的依赖文件。

  • Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中定义另一个路径。

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
   http://maven.apache.org/xsd/settings-1.0.0.xsd">
      <localRepository>D:/MyLocalRepository</localRepository>
</settings>

当你运行 Maven 命令,Maven 将下载依赖的文件到你指定的路径中。

中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。

中央仓库的关键概念:

  • 由 Maven 社区管理。
  • 不需要配置。
  • 需要通过网络才能访问。

要浏览中央仓库的内容,maven 社区提供了一个 URL:http://search.maven.org/#browse。使用这个仓库,开发人员可以搜索所有可以获取的代码库。

远程仓库

开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

Maven 依赖搜索顺序

当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库:

  • 步骤 1 - 在本地仓库中搜索,如果找不到,执行步骤 2,如果找到了则执行其他操作。
  • 步骤 2 - 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,则执行步骤 4,如果找到了则下载到本地仓库中已被将来引用。
  • 步骤 3 - 如果远程仓库没有被设置,Maven 将简单的停滞处理并抛出错误(无法找到依赖的文件)。
  • 步骤 4 - 在一个或多个远程仓库中搜索依赖的文件,如果找到则下载到本地仓库已被将来引用,否则 Maven 将停止处理并抛出错误(无法找到依赖的文件)。

六、Maven-外部依赖

Maven的依赖管理使用的是 Maven - 仓库 的概念。当在远程仓库和中央仓库中,依赖不能被满足时,需要添加外部依赖。

外部依赖相关知识点
指定 groupId 为 library 的名称。
指定 artifactId 为 library 的名称。
指定作用域(scope)为系统。
指定相对于工程位置的系统路径。

		<dependency>
             <groupId>ldapjdk</groupId>
             <artifactId>ldapjdk</artifactId>
             <scope>system</scope>
             <version>1.0</version>
			<systemPath>${basedir}\src\lib\demo.jar</systemPath>
          </dependency>

七、IDEA集成maven

  • settings中添加如下配置:
    在这里插入图片描述

注意maven的选相关配置:
Maven home directory:maven的地址
setting.xml:若项目中使用的maven私服则需要进行配置
maven respository:经常需要关注的maven仓库地址

在这里插入图片描述

  • 1)、Reimport All Maven Projects
    根据pom文件重新加载(导入)文件
  • 2)、Generate Sources and Update Folders For All Project
    让源代码重新进行编译
  • 3)、Download Resource and/or Document
    下载源码和文档
  • 4)、Add Maven Projects
    添加一个maven项目
  • 5) 自定义命令
    在这里插入图片描述
    在这里插入图片描述

6)跳过测试环节
在这里插入图片描述
7)显示所有依赖
在这里插入图片描述
8)LifeCycle(生命周期快速命令)以及Plugins(maven插件快速命令)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lwd2307997664

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值