Maven入门

128 阅读6分钟

Maven是一款为 java 项目构建管理、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。

Maven主要作用理解

1.场景概念:

场景1∶例如我们项目需要第三方库(依赖),如Druid连接池、MySQL数据库驱动和Jackson等。那么我们可以将需要的依赖项的信息编写到 Maven 工程的配置文件,Maven软件就会自动下载并复制这些依赖项到项目中,也会自动下载依赖需要的依赖!确保依赖版本正确无冲突和依赖完整!

场景2: 项目开发完成后,想要将项目打成.war文件,并部署到服务器中运行,使用 Maven

软件,我们可以通过一行构建命令(mvn package)快速项目构建和打包!节省大星时间!

2.依赖管理:

Maven可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有冲突、依赖版本管理等。通过Maven,我们可以方便地维护项目所依赖的外部库,而我们仅仅需要编写配置即可。

3.构建管理:

项目构建是指将源代码、配置文件、资源文件等转化为能够运行或部署的应用程序或库的过程!

Maven可以管理项目的编译、测试、打包、部署等构建过程。通过实现标准的构建生命周期,Maven可以确保每一个构建过程都遵循同样的规则和最佳实践。同时,Maven 的插件机制也使得开发者可以对构建过程进行扩展和定制。主动触发构建,只需要简单的命令操作即可。

注意!由于IDEA的创建项目都是单独的,所以每次新项目都要手动去配置一下Maven

创建JAVASE项目

右键项目创建 New Module 选择 java语言 Maven 以及 JDK17

上方命名代表文件在电脑中的命名,下方为文件在Maven仓库中的命名

创建JAVAEE项目

第一种:手动创建 需要完整的 webapp文件结构

第二种:插件:JBLJavaToWeb

|-- pom.xml                         # Maven 项目管理文件 
|-- src
  |-- main                          # 项目主要代码
  |   |-- java                      # Java 源代码目录
  |   |   `-- com/example/myapp     # 开发者代码主目录
  |   |       |-- controller        # 存放 Controller 层代码的目录
  |   |       |-- service           # 存放 Service 层代码的目录
  |   |       |-- dao               # 存放 DAO 层代码的目录
  |   |       `-- model             # 存放数据模型的目录
  |   |-- resources                 # 资源目录,存放配置文件、静态资源等
  |   |   |-- log4j.properties      # 日志配置文件
  |   |   |-- spring-mybatis.xml    # Spring Mybatis 配置文件
  |   |   `-- static                # 存放静态资源的目录
  |   |       |-- css               # 存放 CSS 文件的目录
  |   |       |-- js                # 存放 JavaScript 文件的目录
  |   |       `-- images            # 存放图片资源的目录
  |   `-- webapp                    # 存放 WEB 相关配置和资源
  |       |-- WEB-INF               # 存放 WEB 应用配置文件
  |       |   |-- web.xml           # Web 应用的部署描述文件
  |       |   `-- classes           # 存放编译后的 class 文件
  |       `-- index.html            # Web 应用入口页面
  `-- test                          # 项目测试代码
      |-- java                      # 单元测试目录
      `-- resources                 # 测试资源目录

Maveb核心功能依赖和构建管理

 <!-- gavp属性 -->
    <!-- 不会改变 -->
    <groupId>com.atguigu</groupId>
    <artifactId>maven-javase-project-01</artifactId>
    <!-- 构建过程 - 部署 - 修改 -->
    <version>1.0-SNAPSHOT</version>
    <!-- maven工程的打包方式 java jar [默认值] web war -->
    <packaging>jar</packaging>

    <!-- 第三方依赖信息声明
            dependencies - 项目依赖信息的集合
                dependency - 每个依赖项
                       [gav]  - 一来的信息,就是其他maven的工程中的jar包
    -->
    <dependencies>
        <dependency>
            <groupId></groupId>
            <artifactId></artifactId>
            <version></version>
        </dependency>

    </dependencies>

扩展构建管理和插件配置

构建概念:

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。

主动触发场景:

  • 重新编译 : 编译不充分, 部分文件没有被编译!
  • 打包 : 独立部署到外部服务器软件,打包部署
  • 部署本地或者私服仓库 : maven工程加入到本地或者私服仓库,供其他工程使用

命令方式构建:

语法: mvn 构建命令 构建命令....

命令描述
mvn clean清理编译或打包后的项目结构,删除target文件夹
mvn compile编译项目,生成target文件
mvn test执行测试源码 (测试)
mvn site生成一个项目依赖信息的展示页面
mvn package打包项目,生成war / jar 文件
mvn install打包后上传到maven本地仓库(本地部署)
mvn deploy只打包,上传到maven私服仓库(私服部署)

可视化方式构建:

终端构建:

构建命令周期:

构建生命周期可以理解成是一组固定构建命令的有序集合,触发周期后的命令,会自动触发周期前的命令!也是一种简化构建的思路!

清理周期:主要是对项目编译生成文件进行清理

包含命令:clean

默认周期:定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分

包含命令:compile - test - package - install / deploy

报告周期

包含命令:site

打包: mvn clean package 本地仓库: mvn clean install

最佳使用方案:

  • 打包: mvn clean package
  • 重新编译: mvn clean compile
  • 本地部署: mvn clean install

工程中的继承关系

子工程可以继承父工程的依赖

父工程的创建

<packaging>pom</packaging>

并且由于父工程只担当提供依赖的角色,将src文件夹删除

子工程的创建

右键父工程创建模块

<!-- parent 标签及继承父工程的 gav -->
<parent>
  <groupId>com.atguigu</groupId>
  <artifactId>maven-pom-parent-06</artifactId>
  <version>1.0-SNAPSHOT</version>
</parent>

在父工程当中为子工程声明版本信息

<!-- dependencies是导入依赖,子工程都会拥有导入的依赖!!-->
<dependencies></dependencies>
<!-- 下面才是正确的声明方式!!指继承的依赖-->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId></groupId>
      <artifactId></artifactId>
    </dependency>
  </dependencies>
</dependencyManagement>
<!-- 导入com.fasterxml.jackson.core的依赖 不需要版本号(由父工程提供)-->
<dependencies>
  <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
  </dependency>
</dependencies>

小结:父工程只是提供版本号,并不会给父工程和子工程直接下载依赖,子工程需要通过手动导入依赖以及父工程中的版本号,才可以下载依赖。

工程中的聚合关系

  1. 聚合概念 Maven 聚合是指将多个项目组织到一个父级项目中,通过触发父工程的构建,统一按顺序触发子工程构建的过程!!
  2. 聚合作用
    1. 统一管理子项目构建:通过聚合,可以将多个子项目组织在一起,方便管理和维护。
    2. 优化构建顺序:通过聚合,可以对多个项目进行顺序控制,避免出现构建依赖混乱导致构建失败的情况。

当创建子工程时,父工程会自动配置

<modules>
  <module>shop-user</module>
</modules>

Maven核心掌握总结

核心点掌握目标
安装maven安装、环境变量、maven配置文件修改
工程创建gavp属性理解、JavaSE/EE工程创建、项目结构
依赖管理依赖添加、依赖传递、版本提取、导入依赖错误解决
构建管理构建过程、构建场景、构建周期等
继承和聚合理解继承和聚合作用、继承语法和实践、聚合语法和实践