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

相关推荐
Ethan learn English38 分钟前
汽车零部件英语词汇 | 3000 最常用单词系列
笔记·学习·汽车·生活·英语·可理解性输入
tuokuac42 分钟前
MVC的含义
java·mvc
为java加瓦1 小时前
IO多路复用的两种触发机制:ET和LT触发机制。以及IO操作是异步的还是同步的理解
java·服务器·网络
_extraordinary_1 小时前
Java SpringBoot(一)--- 下载Spring相关插件,创建一个Spring项目,创建项目出现的问题
java·spring boot·spring
聪明的笨猪猪1 小时前
Java Spring “核心基础”面试清单(含超通俗生活案例与深度理解)
java·经验分享·笔记·面试
_Power_Y1 小时前
SSM面试题学习
java·开发语言·学习
不要再敲了1 小时前
Spring Security 完整使用指南
java·后端·spring
SccTsAxR2 小时前
[初学C语言]关于scanf和printf函数
c语言·开发语言·经验分享·笔记·其他
摇滚侠2 小时前
【IT老齐456】Spring Boot优雅开发多线程应用,笔记01
spring boot·redis·笔记
还是鼠鼠2 小时前
《黑马商城》微服务保护-详细介绍【简单易懂注释版】
java·spring boot·spring·spring cloud·sentinel·maven