快速入手maven-CSDN博客

Maven介绍

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

总结Maven就是一个软件掌握软件安装、配置、以及基本功能 项目构建、依赖管理 使用就是本课程的主要目标

Maven安装和配置

https://maven.apache.org/docs/history.html

选用版本

apache-maven-3.6.3-bin.zip

发布时间maven版本jdk最低版本
**2019 - 11 - **253.6. 3Java 7
  1. 安装

    安装条件 maven需要本机安装java环境、必需包含java_home环境变量

    软件安装 右键解压即可绿色免安装
    软件结构

    在这里插入图片描述

  2. 环境变量
    环境变量 配置maven_home 和 path

在这里插入图片描述
3. 命令测试

mvn -v 
# 输出版本信息即可如果错误请仔细检查环境变量即可
# 友好提示如果此处错误绝大部分原因都是java_home变量的事请仔细检查
  1. 配置文件

我们需要需改maven/conf/settings.xml配置文件来修改maven的一些默认配置。我们主要休要修改的有三个配置1.依赖本地缓存位置本地仓库位置2.maven下载镜像3.maven选用编译项目的jdk版本

  1. 配置本地仓库地址
<!-- localRepository
| The path to the local repository maven will use to store artifacts.
|
| Default: ${user.home}/.m2/repository
<localRepository>/path/to/local/repo</localRepository>
-->
<!-- conf/settings.xml 55行 -->
<localRepository>D:\repository</localRepository>
  1. 配置国内阿里镜像
<!--在mirrors节点(标签)下添加中央仓库镜像 160行附近-->
<mirror>
  <id>alimaven</id>
  <name>aliyun maven</name>
  <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
  <mirrorOf>central</mirrorOf>
</mirror>
  1. 配置jdk17版本项目构建
<!--在profiles节点(标签)下添加jdk编译版本 268行附近-->
<profile>
  <id>jdk-17</id>
  <activation>
    <activeByDefault>true</activeByDefault>
    <jdk>17</jdk>
  </activation>
  <properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
    <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
  </properties>
</profile>
  1. idea配置本地maven

    我们需要将配置好的maven软件配置到idea开发工具中即可 注意idea工具默认自带maven配置软件但是因为没有修改配置建议替换成本地配置好的maven

    1. 打开idea配置文件构建工具配置
    依次点击
    
    file / settings / build / build tool / maven
    
    1. 选中本地maven软件

在这里插入图片描述
3. 测试是否配置成功

注意如果本地仓库地址不变化只有一个原因就是maven/conf/settings.xml配置文件编写错误仔细检查即可

基于IDEA的Maven工程创建

梳理Maven工程GAVP属性

Maven工程相对之前的工程多出一组gavp属性gav需要我们在创建项目的时指定p有默认值后期通过配置文件修改。既然要填写的属性我们先行了解下这组属性的含义!

Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写其中前三个是必要的而 Packaging 属性为可选项。这四个属性主要为每个项目在maven仓库总做一个标识类似人的《姓-名》。有了具体标识方便maven软件对项目进行管理和互相引用

GAV遵循一下规则

1 GroupID 格式com.{公司/BU }.业务线.[子业务线]最多 4 级。

说明{公司/BU} 例如alibaba/taobao/tmall/aliexpress 等 BU 一级子业务线可选。

正例com.taobao.tddl 或 com.alibaba.sourcing.multilang com.atguigu.java

2 ArtifactID 格式产品线名-模块名。语义不重复不遗漏先到仓库中心去查证一下。

正例tc-client / uic-api / tair-tool / bookstore

3 Version版本号格式推荐主版本号.次版本号.修订号 1.0.0

1 主版本号当做了不兼容的 API 修改或者增加了能改变产品方向的新功能。

2 次版本号当做了向下兼容的功能性新增新增类、接口等。

3 修订号修复 bug没有修改方法签名的功能加强保持 API 兼容性。

例如 初始→1.0.0 修改bug → 1.0.1 功能调整 → 1.1.1等

Packaging定义规则

指示将项目打包为什么类型的文件idea根据packaging值识别maven项目类型

packaging 属性为 jar默认值代表普通的Java工程打包以后是.jar结尾的文件。

packaging 属性为 war代表Java的web工程打包以后.war结尾的文件。

packaging 属性为 pom代表不会打包用来做继承的父工程。

Idea构建Maven JavaSE工程

注意此处省略了version直接给了一个默认值<version>1.0-SNAPSHOT</version>

自己后期可以在项目中随意修改
在这里插入图片描述

Idea构建Maven JavaEE工程

1. 手动创建
1. 创建一个javasemaven工程

2. 手动添加web项目结构文件

   注意结构和命名固定
![在这里插入图片描述](https://img-blog.csdnimg.cn/640491b77a9f4d08a13aaa09c64eafe4.png)
3. 修改pom.xml文件打包方式
	修改位置项目下/pom.xml
<groupId>com.test</groupId>
<artifactId>maven_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 新增一列打包方式packaging -->
<packaging>war</packaging>

4 . 刷新和校验
在这里插入图片描述

项目的webapp文件夹出现小蓝点代表成功

2. 插件方式创建
  1. 安装插件JBLJavaToWeb

file / settings / plugins / marketplace
在这里插入图片描述
2. 创建一个javasemaven工程
3. 右键、使用插件快速补全web项目
在这里插入图片描述

Maven工程项目结构说明

Maven 是一个强大的构建工具它提供一种标准化的项目结构可以帮助开发者更容易地管理项目的依赖、构建、测试和发布等任务。以下是 Maven Web 程序的文件结构及每个文件的作用

|-- 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                     # 测试资源目录
  • pom.xmlMaven 项目管理文件用于描述项目的依赖和构建配置等信息。
  • src/main/java存放项目的 Java 源代码。
  • src/main/resources存放项目的资源文件如配置文件、静态资源等。
  • src/main/webapp/WEB-INF存放 Web 应用的配置文件。
  • src/main/webapp/index.htmlWeb 应用的入口页面。
  • src/test/java存放项目的测试代码。
  • src/test/resources存放测试相关的资源文件如测试配置文件等。

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

Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中避免出现版本冲突和依赖缺失等问题。

我们通过定义 POM 文件Maven 能够自动解析项目的依赖关系并通过 Maven 仓库自动下载和管理依赖从而避免了手动下载和管理依赖的繁琐工作和可能引发的版本冲突问题。

重点: 编写pom.xml文件!

maven项目信息属性配置和读取

<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志并且配置时生成的路径也是由此生成 如com.companyname.project-groupmaven会将该项目打成的jar包放本地路径/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 项目的唯一ID一个groupId下面可能多个项目就是靠artifactId来区分的 -->
<artifactId>project</artifactId>
<!-- 版本号 -->
<version>1.0.0</version>

<!--打包方式
    默认jar
    jar指的是普通的java项目打包方式 项目打成jar包
    war指的是web项目打包方式项目打成war包
    pom不会讲项目打包这个项目作为父工程被其他工程聚合或者继承后面会讲解两个概念
-->
<packaging>jar/pom/war</packaging>

依赖管理和添加

<!-- 
   通过编写依赖jar包的gav必要属性引入第三方依赖
   scope属性是可选的可以指定依赖生效范围
   依赖信息查询方式
      1. maven仓库信息官网 https://mvnrepository.com/
      2. mavensearch插件搜索
 -->
<dependencies>
    <!-- 引入具体的依赖包 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <!--
            生效范围
            - compile main目录 test目录  打包打包 [默认]
            - providedmain目录 test目录  Servlet
            - runtime 打包运行           MySQL
            - test:    test目录           junit
         -->
        <scope>runtime</scope>
    </dependency>

</dependencies>

依赖版本提取和维护:

<!--声明版本-->
<properties>
  <!--命名随便,内部制定版本号即可-->
  <junit.version>4.11</junit.version>
  <!-- 也可以通过 maven规定的固定的key配置maven的参数如下配置编码格式-->
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>

<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <!--引用properties声明版本 -->
    <version>${junit.version}</version>
  </dependency>
</dependencies>

依赖传递和冲突

依赖传递指的是当一个模块或库 A 依赖于另一个模块或库 B而 B 又依赖于模块或库 C那么 A 会间接依赖于 C。这种依赖传递结构可以形成一个依赖树。当我们引入一个库或框架时构建工具如 Maven、Gradle会自动解析和加载其所有的直接和间接依赖确保这些依赖都可用。

依赖传递的作用是

  1. 减少重复依赖当多个项目依赖同一个库时Maven 可以自动下载并且只下载一次该库。这样可以减少项目的构建时间和磁盘空间。
  2. 自动管理依赖: Maven 可以自动管理依赖项使用依赖传递简化了依赖项的管理使项目构建更加可靠和一致。
  3. 确保依赖版本正确性通过依赖传递的依赖之间都不会存在版本兼容性问题确实依赖的版本正确性

依赖传递演示

项目中需要导入jackson相关的依赖通过之前导入经验jackson需要导入三个依赖分别为
在这里插入图片描述
通过查看网站介绍的依赖传递特性data-bind中依赖其他两个依赖

在这里插入图片描述
最佳导入直接可以导入data-bind自动依赖传递需要的依赖

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.0</version>
</dependency>

依赖冲突演示

当直接引用或者间接引用出现了相同的jar包! 这时呢一个项目就会出现相同的重复jar包这就算作冲突依赖冲突避免出现重复依赖并且终止依赖传递

在这里插入图片描述
maven自动解决依赖冲突问题能力会按照自己的原则进行重复依赖选择。同时也提供了手动解决的冲突的方式不过不推荐

解决依赖冲突如何选择重复依赖方式

  1. 自动选择原则

    • 短路优先原则第一原则

      A—>B—>C—>D—>E—>X(version 0.0.1)

      A—>F—>X(version 0.0.2)

      则A依赖于X(version 0.0.2)。

    • 依赖路径长度相同情况下则“先声明优先”第二原则

      A—>E—>X(version 0.0.1)

      A—>F—>X(version 0.0.2)

      在<depencies></depencies>中先声明的路径相同会优先选择

小思考:

前提
   A 1.1 -> B 1.1 -> C 1.1 
   F 2.2 -> B 2.2 
   
pom声明
   F 2.2
   A 1.1 
   
   B 2.2 

依赖导入失败场景和解决方案

在使用 Maven 构建项目时可能会发生依赖项下载错误的情况主要原因有以下几种

  1. 下载依赖时出现网络故障或仓库服务器宕机等原因导致无法连接至 Maven 仓库从而无法下载依赖。
  2. 依赖项的版本号或配置文件中的版本号错误或者依赖项没有正确定义导致 Maven 下载的依赖项与实际需要的不一致从而引发错误。
  3. 本地 Maven 仓库或缓存被污染或损坏导致 Maven 无法正确地使用现有的依赖项并且也无法重新下载

解决方案

  1. 检查网络连接和 Maven 仓库服务器状态。

  2. 确保依赖项的版本号与项目对应的版本号匹配并检查 POM 文件中的依赖项是否正确。

  3. 清除本地 Maven 仓库缓存lastUpdated 文件因为只要存在lastupdated缓存文件刷新也不会重新下载。本地仓库中根据依赖的gav属性依次向下查找文件夹最终删除内部的文件刷新重新下载即可

    例如 pom.xml依赖

<dependency>
  <groupId>com.alibaba</groupId>
  <artifactId>druid</artifactId>
  <version>1.2.8</version>
</dependency>

文件
在这里插入图片描述
脚本使用
清理maven错误缓存.bat

@echo off
rem 这里写你的仓库路径
set REPOSITORY_PATH=D:\repository
rem 正在搜索...
for /f "delims=" %%i in ('dir /b /s "%REPOSITORY_PATH%\*lastUpdated*"') do (
    del /s /q %%i
)
rem 搜索完毕
pause

先用txt 修改 在转换成bat 运行

扩展构建管理和插件配置

构建概念:

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

在这里插入图片描述
主动触发场景

  • 重新编译 : 编译不充分, 部分文件没有被编译!
  • 打包 : 独立部署到外部服务器软件,打包部署
  • 部署本地或者私服仓库 : 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 

周期命令和插件:

周期→包含若干命令→包含若干插件!

使用周期命令构建简化构建过程

最终进行构建的是插件

插件配置:

<build>
   <!-- jdk17 和 war包版本插件不匹配 -->
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>3.2.2</version>
        </plugin>
    </plugins>
</build>

Maven继承和聚合特性

Maven工程继承关系
继承概念

Maven 继承是指在 Maven 的项目中让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息简化项目的管理和维护工作。

在这里插入图片描述
2.继承作用

作用在父工程中统一管理项目中的依赖信息,进行统一版本管理!

它的背景是

  • 对一个比较大型的项目进行了模块拆分。
  • 一个 project 下面创建了很多个 module。
  • 每一个 module 都需要配置自己的依赖信息。
    它背后的需求是
  • 多个模块要使用同一个框架它们应该是同一个版本所以整个项目中使用的框架版本需要统一管理。
  • 使用框架时所需要的 jar 包组合或者说依赖信息组合需要经过长期摸索和反复调试最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。
    通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包又能够将以往的经验沉淀下来节约时间和精力。
  1. 继承语法
  • 父工程
<groupId>com.test.maven</groupId>
<artifactId>pro03-maven-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 当前工程作为父工程它要去管理子工程所以打包方式必须是 pom -->
<packaging>pom</packaging>

  • 子工程
<!-- 使用parent标签指定当前工程的父工程 -->
<parent>
  <!-- 父工程的坐标 -->
  <groupId>com.test.maven</groupId>
  <artifactId>pro03-maven-parent</artifactId>
  <version>1.0-SNAPSHOT</version>
</parent>


<!-- 子工程的坐标 -->
<!-- 如果子工程坐标中的groupId和version与父工程一致那么可以省略 -->
<!-- <groupId>com.atguigu.maven</groupId> -->
<artifactId>pro04-maven-module</artifactId>
<!-- <version>1.0-SNAPSHOT</version> -->

4.父工程依赖统一管理

  • 父工程声明版本

使用dependencyManagement标签配置对依赖的管理

<!-- 使用dependencyManagement标签配置对依赖的管理 -->
<!-- 被管理的依赖并没有真正被引入到工程 -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.0.0.RELEASE</version>
    </dependency>
  </dependencies>
</dependencyManagement>
  • 子工程引用版本
<!-- 子工程引用父工程中的依赖信息时可以把版本号去掉。  -->
<!-- 把版本号去掉就表示子工程中这个依赖的版本由父工程决定。 -->
<!-- 具体来说是由父工程的dependencyManagement来决定。 -->
<dependencies>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
  </dependency>
</dependencies>

Maven工程聚合关系

  1. 聚合概念

    Maven 聚合是指将多个项目组织到一个父级项目中通过触发父工程的构建,统一按顺序触发子工程构建的过程!!

  2. 聚合作用

    1. 统一管理子项目构建通过聚合可以将多个子项目组织在一起方便管理和维护。
    2. 优化构建顺序通过聚合可以对多个项目进行顺序控制避免出现构建依赖混乱导致构建失败的情况。
  3. 聚合语法

    父项目中包含的子项目列表。

<project>
  <groupId>com.example</groupId>
  <artifactId>parent-project</artifactId>
  <packaging>pom</packaging>
  <version>1.0.0</version>
  <modules>
    <module>child-project1</module>
    <module>child-project2</module>
  </modules>
</project>
  1. 聚合演示

通过触发父工程构建命令、引发所有子模块构建产生反应堆

在这里插入图片描述

Maven实战案例搭建微服务Maven工程架构

项目需求和结构分析

在这里插入图片描述
需求案例搭建一个电商平台项目该平台包括用户服务、订单服务、通用工具模块等。

红线的依赖需要把common-service 提取到仓库之后在提取依赖

项目架构

  1. 用户服务负责处理用户相关的逻辑例如用户信息的管理、用户注册、登录等。
  2. 订单服务负责处理订单相关的逻辑例如订单的创建、订单支付、退货、订单查看等。
  3. 通用模块负责存储其他服务需要通用工具类其他服务依赖此模块。

服务依赖

  1. 用户服务 (1.0.1)
    • spring-context 6.0.6
    • spring-core 6.0.6
    • spring-beans 6.0.6
    • jackson-databind / jackson-core / jackson-annotations 2.15.0
  2. 订单服务 (1.0.1)
    1. shiro-core 1.10.1
    2. spring-context 6.0.6
    3. spring-core 6.0.6
    4. spring-beans 6.0.6
  3. 通用模块 (1.0.1)
    1. commons-io 2.11.0

项目搭建和统一构建

a>父模块搭建 (micro-shop)

  1. 创建父工程

在这里插入图片描述
2. pom.xml配置

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>micro-shop</artifactId>
    <version>1.0.1</version>
    <!-- 父工程不打包所以选择pom值-->
    <packaging>pom</packaging>

    <properties>
        <spring.version>6.0.6</spring.version>
        <jackson.version>2.15.0</jackson.version>
        <shiro.version>1.10.1</shiro.version>
        <commons.version>2.11.0</commons.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <!-- 依赖管理 -->
    <dependencyManagement>
        <dependencies>
            <!-- spring-context会依赖传递core/beans -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
            </dependency>

            <!-- jackson-databind会依赖传递core/annotations -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.version}</version>
            </dependency>

            <!-- shiro-core -->
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <!-- commons-io -->
            <dependency>
                <groupId>commons-io</groupId>
                <artifactId>commons-io</artifactId>
                <version>${commons.version}</version>
            </dependency>

        </dependencies>

    </dependencyManagement>

    <dependencies>
        <!-- 父工程添加依赖会自动传递给所有子工程不推荐 -->
    </dependencies>

    <!-- 统一更新子工程打包插件-->
    <build>
        <!-- jdk17 和 war包版本插件不匹配 -->
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.2</version>
            </plugin>
        </plugins>
    </build>

</project>

  1. 通用模块 (common-service)
    这里父工程注意已经自动添加了

    1. 创建模块

在这里插入图片描述

在这里插入图片描述
2.pom.xml配置

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>micro-shop</artifactId>
        <version>1.0.1</version>
    </parent>
    <artifactId>common-service</artifactId>
    <!-- 打包方式默认就是jar -->
    <packaging>jar</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- 声明commons-io继承父工程版本 -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>
    </dependencies>

</project>

3.用户模块 (user-service)
1.创建模块
在这里插入图片描述
在这里插入图片描述
2.pom.xml配置

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
  <modelVersion>4.0.0</modelVersion>  
  <parent> 
    <groupId>org.example</groupId>  
    <artifactId>micro-shop</artifactId>  
    <version>1.0.1</version> 
  </parent>  
  <artifactId>user-service</artifactId>  
  <packaging>war</packaging>

  <properties> 
    <maven.compiler.source>17</maven.compiler.source>  
    <maven.compiler.target>17</maven.compiler.target>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  </properties>

  <dependencies>
    <!-- 添加spring-context 自动传递 core / beans -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
    </dependency>

    <!-- 添加jackson-databind 自动传递 core / annotations -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
    </dependency>
  </dependencies>
</project>


4.订单模块 (order-service)

  1. 创建模块在这里插入图片描述
  2. pom.xml
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.example</groupId>
        <artifactId>micro-shop</artifactId>
        <version>1.0.1</version>
    </parent>

    <artifactId>order-service</artifactId>
    <packaging>war</packaging>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- 继承父工程依赖版本 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>

        <!-- 继承父工程依赖版本 -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
        </dependency>
    </dependencies>

</project>

Maven核心掌握总结

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

Maven获取包的xml的插件

maven-search
在这里插入图片描述
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6