【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 )

这篇具有很好参考价值的文章主要介绍了【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


Maven是什么?

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

依赖管理工具


一、Maven安装和配置

maven下载版本

使用:apache-maven-3.6.3
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

  1. 软件结构:
    【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
  2. 环境变量 命令行显示版本

mvn -v
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
设置:
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

MAVEN_HOME
D:\Environment\apache-maven-3.6.3

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

%MAVEN_HOME%\bin

本地配置文件设置

  1. maven/conf/settings.xml配置文件
    依赖本地缓存位置(本地仓库位置)55行左右
    【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
  2. 配置国内阿里镜像
    【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
<!--在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版本项目构建
    【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
<!--在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>

idea配置本地maven

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

二、基于IDEA的Maven工程创建

2.1 Maven工程GAVP属性

Maven工程相对之前的工程,多出一组gavp属性,gav需要我们在创建项目的时指定,p有默认值,后期通过配置文件修改。
Maven 中的 GAVP 是指 GroupId、ArtifactId、Version、Packaging 等四个属性的缩写,其中前三个是必要的,而 Packaging 属性为可选项。

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,代表不会打包,用来做继承的父工程。

2.2 Idea构建Maven JavaEE工程

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

  • 安装插件JBLJavaToWeb
  • 模块 右键 【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
    出现这个 构建完成
    【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

三、Maven工程项目结构说明

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

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

4.1 依赖管理和配置

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

编写pom.xml文件

  • maven项目信息属性配置和读取:
<!-- 模型版本 -->
<modelVersion>4.0.0</modelVersion>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的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>
  • 依赖管理和添加:
    • maven仓库信息官网
    • idea 插件:maven-search
      • 使用【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
<!-- 
   通过编写依赖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目录  打包打包 [默认]
            - provided:main目录 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>

4.2 依赖传递和冲突

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

依赖传递 : 导入依赖,会自动导入依赖的依赖(compile dependenices)
简化依赖的导入 确保依赖的版本无冲突

依赖冲突: 发现已存在依赖(重复依赖)会终止依赖传递!避免循环依赖和重复依赖的问题!

依赖冲突的发生场景:重复依赖!
解决原则:

  1. 引用路径长度 更短
  2. 在上面的优先 dependencies声明的先后顺序

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

可能会发生依赖项下载错误的情况,主要原因有以下几种:

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

解决方案:

  1. 检查网络连接和 Maven 仓库服务器状态。
  2. 确保依赖项的版本号与项目对应的版本号匹配,并检查 POM 文件中的依赖项是否正确。
  3. 清除本地 Maven 仓库缓存(lastUpdated 文件),因为只要存在lastupdated缓存文件,刷新也不会重新下载。本地仓库中,根据依赖的gav属性依次向下查找文件夹,最终删除内部的文件,刷新重新下载即可!

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

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

使用记事本打开
set REPOSITORY_PATH=D:\repository 改成你本地仓库地址即可!
点击运行脚本,即可自动清理本地错误缓存文件!!

4.4 扩展构建管理和插件配置

项目构建是指将源代码、依赖库和资源文件等转换成可执行或可部署的应用程序的过程,在这个过程中包括编译源代码、链接依赖库、打包和部署等多个步骤。
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

主动触发场景:

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

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

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

可视化方式构建:
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
构建命令周期:

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

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

    包含命令: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继承和聚合特性

5.1 Maven工程继承关系

Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。
多个项目中共享同一配置信息,简化项目的管理和维护工作。
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java作用:在父工程中统一管理项目中的依赖信息,进行统一版本管理!

背景:

  • 对一个比较大型的项目进行了模块拆分。
  • 一个 project 下面,创建了很多个 module。
  • 每一个 module 都需要配置自己的依赖信息。

需求:

  • 多个模块要使用同一个框架,它们应该是同一个版本,所以整个项目中使用的框架版本需要统一管理。
  • 使用框架时所需要的 jar 包组合(或者说依赖信息组合)需要经过长期摸索和反复调试,最终确定一个可用组合。这个耗费很大精力总结出来的方案不应该在新的项目中重新摸索。
    通过在父工程中为整个项目维护依赖信息的组合既保证了整个项目使用规范、准确的 jar 包;又能够将以往的经验沉淀下来,节约时间和精力。

继承语法:

  • 父工程:
<groupId>com.doug.maven</groupId>
<artifactId>pro03-maven-parent</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 当前工程作为父工程,它要去管理子工程,所以打包方式必须是 pom -->
<packaging>pom</packaging>
  • 子工程:
<!-- 使用parent标签指定当前工程的父工程 -->
<parent>
  <!-- 父工程的坐标 -->
  <groupId>com.doug.maven</groupId>
  <artifactId>pro03-maven-parent</artifactId>
  <version>1.0-SNAPSHOT</version>
</parent>

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

父工程依赖统一管理:

  • 父工程声明版本
<!-- 使用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>

5.2 Maven工程聚合关系

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

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

聚合语法:
父项目中包含的子项目列表。

<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>

通过触发父工程构建命令、引发所有子模块构建!产生反应堆!
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

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

6.1 项目需求和结构分析

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
需求案例:搭建一个电商平台项目,该平台包括用户服务、订单服务、通用工具模块等。

项目架构:

  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

6.2 项目搭建和统一构建

父模块搭建 (micro-shop)

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

  • 父模块 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>com.doug</groupId>
    <artifactId>micro-shop</artifactId>
    <version>1.0.1</version>
    <modules>
        <module>user-service</module>
    </modules>
    <!-- 父工程不打包,所以选择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>

删除src 只留pom

子模块搭建 (user-service)

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
转为web:
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
pom设置:

<?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">  
  <parent> 
    <artifactId>micro-shop</artifactId>  
    <groupId>com.doug</groupId>  
    <version>1.0.1</version> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <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>

  • 子模块 订单模块 (order-service)
    pom :
<?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">  
  <parent> 
    <artifactId>micro-shop</artifactId>  
    <groupId>com.doug</groupId>  
    <version>1.0.1</version> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <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>

  • 子模块 通用模块 (common-service)
<?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">  
  <parent> 
    <artifactId>micro-shop</artifactId>  
    <groupId>com.doug</groupId>  
    <version>1.0.1</version> 
  </parent>  
  <modelVersion>4.0.0</modelVersion>  
  <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>

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

项目下 模块的依赖

install 需要的依赖模块 -> common-service
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

需要引用当前项目 下的 模块作为依赖 就得导出模块为jar , 再由要导入依赖的模块添加dependency

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java

另外两个模块的pom添加模块依赖:

    <dependency>
      <groupId>com.doug</groupId>
      <artifactId>common-service</artifactId>
    </dependency>

【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java


总结

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

构建周期:
【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 ),后端,# JavaWeb,maven,学习,java
shangguigu-SSM-笔记文章来源地址https://www.toymoban.com/news/detail-832784.html

到了这里,关于【Maven】依赖、构建管理 继承与聚合 快速学习(3.6.3 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Maven(六):Maven的使用——继承与聚合

    本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远! Maven 工程之间, A 工程继承 B 工程 B 工程:父工程 A 工程:子工程 本质上是 A 工程的 pom.xml 中的配

    2024年02月06日
    浏览(28)
  • Maven进阶系列-继承和聚合

    Maven工程之间存在继承关系,例如工程B继承工程A,工程C也继承了工程A ProjectA的pom.xml ProjectB的pom.xml ProjectC的pom.xml 本质上是ProjectB和ProjectC的 pom.xml 中的配置 继承了ProjectA中 pom.xml 的配置。 这里提到了 超级pom.xml ,对于我们创建的一个maven工程,即便我们自己的pom.xm文件中没

    2024年02月07日
    浏览(29)
  • Maven工程继承和聚合关系

    Maven 继承是指在 Maven 的项目中,让一个项目从另一个项目中继承配置信息的机制。继承可以让我们在多个项目中共享同一配置信息,简化项目的管理和维护工作。 在父工程中统一管理项目中的依赖信息。 它的背景是: 对一个比较大型的项目进行了模块拆分。 一个 project 下

    2024年01月23日
    浏览(33)
  • 【java】【maven】【高级】MAVEN聚合继承属性等

    目录 1、模块开发与设计 2、聚合 2、继承 3、属性 4、版本管理 5、资源配置 6、多环境配置 7、多环境开发配置 8、跳过测试 9、私服  前言:maven的高级使用包含分模块开发与设计、聚合、继承、属性、版本管理、资源配置、多环境配置、多环境开发配置、跳过测试、私服  

    2024年02月13日
    浏览(24)
  • Maven工程开发中的继承与聚合

    设置一个空的maven工程,工程里面只有pom文件,另外将这个工程的打包方式设置为pom。 在聚合工程里面添加聚合工程里面管理的模块 例如下面02工程继承上面的01工程,在02工程的pom文件中要配置要继承的父工程的依赖,并添加上相对路径。 此时,2、3、4中所用公共依赖的模

    2024年02月16日
    浏览(35)
  • Maven分模块-继承-聚合-私服的高级用法

    JavaWeb知识,介绍Maven的高级用法!!! Maven 是一款构建和管理 Java 项目的工具 ,在需要开发一些中大型的项目,此时仅凭前面所学习的 Maven 的基础知识就比较难以应对了。还需要学习 Maven 提供的一些高级的功能,这些功能在构建和管理 Java 项目的时候用的也是非常多的。

    2024年02月13日
    浏览(28)
  • 【Maven】依赖范围、依赖传递、依赖排除、依赖原则、依赖继承

      在 Maven 中,依赖范围 (Dependency Scope) 用于控制依赖项在编译、测试和运行时的可见性和可用性。通过指定适当的依赖范围,可以在不同的构建和执行环境中控制依赖项的加载和使用。    compile(默认) :该依赖项在编译、测试和运行时都可用。这是大多数依赖项的

    2024年02月14日
    浏览(25)
  • Maven高级操作--分模块设计、聚合、继承和私服

    问题:当项目做大做强的时候,前面的基础Spring开发的框架都无法满足java大型项目的维护和复用,而且团队合作也会造成较大的困难。 所以就需要 分模块设计 :将项目按照功能拆分成若干个子模块,方便项目的 管理维护 、 扩展 ,也方便模块间的 相互调用 , 资源共享 。

    2024年02月11日
    浏览(33)
  • Maven工程 — 继承与聚合 相关知识点详解

     简介:这篇帖子主要讲解Maven工程中的继承与聚合的相关知识点,用简洁的语言和小编自己的理解,深入浅出的说明Maven工程的继承与聚合。 目录 1、继承 1.1 继承关系的实现 1.2 版本锁定 2、聚合 2.1 聚合方法 3、总结 3.1 作用与联系 4、私服 4.1 私服介绍 4.2 资源上传与下载

    2024年01月25日
    浏览(35)
  • Maven 聚合和继承 Inheritance vs Aggregation

    A Project Object Model or POM is the fundamental unit of work in Maven. It is an XML file that contains information about the project and configuration details used by Maven to build the project. It contains default values for most projects. Examples for this is the build directory, which is  target ; the source directory, which is  src/main/java ; the tes

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包