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

相关推荐
sunshine22 girl2 分钟前
Java学习五 面向对象高级5 内部类3-静态内部类和局部内部类(了解)
java·学习
en.en..3 分钟前
Linux 进程退出exit(函数)
java·开发语言·算法
李游Leo5 分钟前
HarmonyOS 7 TaskPool + Node-API + zstd:Native 批量压缩任务的主线程隔离、进度回传与资源收口【鸿蒙心迹】
java·华为·harmonyos
Light Gao7 分钟前
Encoder 与 Decoder 详解:从 Embedding 到 Seq2Seq 的完整数据流
java·开发语言·embedding
程序猿乐锅35 分钟前
【黑马点评 | 第十一篇】关注 Feed 流实现
java·数据库·redis·分布式·后端·缓存·maven
开开心心就好1 小时前
图片白底怎么去掉?抠图工具抠完背景透明
java·服务器·开发语言·pdf·ocr·散列表·启发式算法
Sammyyyyy1 小时前
结构化决策模型 Jev 实战笔记,3 个原语、4 个限制、5 个落地场景
人工智能·笔记·开发工具·编程语言
东方芷兰1 小时前
Agent 技术摘要 05 —— BP、SaaS、B2B、C2B、B2C
java·笔记·python·语言模型·自然语言处理
Chen—LSN1 小时前
数据结构——拿捏复杂度
java·c语言·开发语言·数据结构·经验分享·笔记·算法
一条破秋裤1 小时前
Linux 线程同步:条件变量
java·linux·jvm