Maven笔记

Maven作用

  • 依赖管理、版本控制
  • 标准化项目结构、自动化构建
  • 项目生命周期管理
  • 细分项目模块
  • 自动化构建、通过插件拓展构建过程

Maven下载及配置

https://blog.csdn.net/qq_29689343/article/details/135566775

使用IDEA 构建Maven工程

https://blog.csdn.net/qq_29689343/article/details/135567742

https://blog.csdn.net/qq_29689343/article/details/135569292

Maven依赖传递和依赖冲突

依赖传递

依赖传递包括直接依赖和间接依赖。直接依赖是项目直接引用的库,而间接依赖是直接依赖所引用的其他库。

原则:

  • 传递性: Maven 会自动传递依赖,确保直接依赖所需的库的所有间接依赖也能够被正确解析和获取。
  • 最短路径优先: Maven 会选择最短路径来解析依赖,以确保使用最直接、最适合的版本。
  • 冲突解决: 当出现版本冲突时,Maven 会根据一定的规则进行解决,通常选择最高版本的库。

依赖冲突

当直接引用或者间接引用出现了相同的 jar 包 依赖冲突出现

1.Maven自动解决依赖冲突:

短路优先原则(第一原则)

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)

在中,先声明的,路径相同,会优先选择

2.手动排除解决

xml 复制代码
 <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>com.alibaba</groupId>
                    <artifactId>druid</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

Maven继承和聚合

继承

Maven 支持工程之间的继承关系,其中一个工程可以作为另一个工程的父工程。这种继承关系允许子工程继承父工程的配置、插件、依赖等信息,从而减少冗余配置,提高项目的可维护性。

继承语法:

在子工程的pom.xml文件中,使用元素来声明父工程。,建立了与父工程的继承关系。

xml 复制代码
 <parent>
        <artifactId>youlai-system</artifactId>
        <groupId>com.youlai</groupId>
        <version>3.2.1</version>
    </parent>

父工程统一管理依赖版本(此时被管理的依赖并没有真正被引入到工程)

xml 复制代码
    <dependencyManagement>
        <dependencies>
            <!--Spring Cloud  & Alibaba  -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <!-- API 接口文档 -->
            <dependency>
                <groupId>com.github.xiaoymin</groupId>
                <artifactId>knife4j-dependencies</artifactId>
                <version>${knife4j.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>${druid.version}</version>
            </dependency>

            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
                <version>${mybatis-plus.version}</version>
            </dependency>

            <!-- 分布式文件存储 -->
            <dependency>
                <groupId>io.minio</groupId>
                <artifactId>minio</artifactId>
                <version>${minio.version}</version>
            </dependency>

            <dependency>
                <groupId>com.github.binarywang</groupId>
                <artifactId>weixin-java-miniapp</artifactId>
                <version>${weixin-java.version}</version>
            </dependency>

            <dependency>
                <groupId>com.github.binarywang</groupId>
                <artifactId>weixin-java-pay</artifactId>
                <version>${weixin-java.version}</version>
            </dependency>

            <!-- redisson 分布式锁 -->
            <dependency>
                <groupId>org.redisson</groupId>
                <artifactId>redisson-spring-boot-starter</artifactId>
                <version>${redisson.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>common-core</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>common-mybatis</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>common-rabbitmq</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>common-redis</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>common-web</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>common-security</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>common-seata</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>common-apidoc</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>common-sms</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-core</artifactId>
                <version>${aliyun.java.sdk.core.version}</version>
            </dependency>

            <dependency>
                <groupId>com.aliyun</groupId>
                <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
                <version>${aliyun.java.sdk.dysmsapi.version}</version>
            </dependency>

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>${easyexcel.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>system-api</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>oms-api</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>pms-api</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>ums-api</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>com.youlai</groupId>
                <artifactId>sms-api</artifactId>
                <version>${project.version}</version>
            </dependency>

            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>

            <dependency>
                <groupId>org.mapstruct</groupId>
                <artifactId>mapstruct-processor</artifactId>
                <version>${mapstruct.version}</version>
            </dependency>

            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>${aliyun-sdk-oss.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

子工程在自己的pom.xml继承父工程依赖版本,不需写版本号

xml 复制代码
  <dependencies>
        <!-- Spring Cloud & Alibaba -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
        <!-- 注册中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>jsr305</artifactId>
                    <groupId>com.google.code.findbugs</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <!-- 配置中心 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- Sentinel流量控制、熔断降级 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!-- Sentinel规则持久化至Nacos配置 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
        <!-- 分布式对象存储 -->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
        </dependency>
    </dependencies>

聚合

Maven 聚合是指一个父工程包含了多个子模块,这些子模块可以是独立的 Maven 工程。这种关系允许在一个父工程中同时构建和管理多个相关联的子模块,形成一个整体的项目。通过聚合,可以一次性构建整个项目,而不必逐个构建每个子模块。

聚合的语法:

在父工程的 pom.xml 文件中,使用 元素来声明子模块。

xml 复制代码
<modules>
    <module>子模块1</module>
    <module>子模块2</module>
    <!-- 可以有更多的子模块 -->
</modules>

Maven私服

https://blog.csdn.net/qq_29689343/article/details/135582911

相关推荐
那个松鼠很眼熟w13 分钟前
4. GB2312字符集,以及字符编码
笔记
人道领域22 分钟前
【0-1的agent进阶篇】Prompt 与上下文工程
java·开发语言·prompt·mcp
浮江雾32 分钟前
Flutter第四节------核心概念学习笔记:从基础语法到异步编程
linux·服务器·开发语言·笔记·flutter·入门·基础
KINGSEA_1681 小时前
AgentScope Java 2.0 架构解析
java
折哥的程序人生 · 物流技术专研1 小时前
Java 23 种设计模式:从踩坑到精通 | 备忘录模式 —— 快照与撤销,给对象装一个“后悔药”
java·设计模式·备忘录模式·行为型模式·java设计模式·从踩坑到精通·撤销重做
ysa0510301 小时前
【板子】欧拉序
c++·笔记·算法·深度优先·图论
ikun_文1 小时前
Java里面异常Exception体系知识点
java
不负岁月无痕1 小时前
STL -- C++ 红黑树封装 Map 和 Set
java·c语言·开发语言·c++·面试
小园子的小菜1 小时前
Java核心基础:反射与泛型底层原理及实战用法详解
java·开发语言
淘源码A1 小时前
多院区集团化云PACS系统源码,原生兼容国产软硬件环境
java·云计算·源码·saas·pacs·医学影像系统