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

相关推荐
娃哈哈哈哈呀10 分钟前
html-pre标签
java·前端·html
LanLance13 分钟前
ES101系列09 | 运维、监控与性能优化
java·运维·后端·elasticsearch·云原生·性能优化·golang
Java永无止境13 分钟前
Web前端基础:HTML-CSS
java·前端·css·html·javaweb
love530love35 分钟前
【笔记】旧版MSYS2 环境中 Rust 升级问题及解决过程
开发语言·人工智能·windows·笔记·python·rust·virtualenv
clk66071 小时前
Spring Boot
java·spring boot·后端
扣丁梦想家1 小时前
✅ 常用 Java HTTP 客户端汇总及使用示例
java·开发语言·http
sss191s1 小时前
Java 集合面试题 PDF 及常见考点解析与备考指南
java·开发语言·pdf
七七&5561 小时前
java面试-场景题
java·python·面试
loser.loser2 小时前
QQ邮箱发送验证码(Springboot)
java·spring boot·mybatis
黑色的山岗在沉睡2 小时前
《视觉SLAM十四讲》自用笔记 第二讲:SLAM系统概述
笔记