Maven的核心笔记(6)maven的传递、冲突、聚合

  • Maven项目的依赖传递
    有三个项目:ABC
     A
     |
     B
     |
     C
    B是依赖A的,C又是依赖B的,所以依赖传递,C也是依赖A的
    A B 项目大成jar包到本地仓库中:
    clean package(打成jar包) install(jar包安装到本地仓库)
    clean compile(编译)

    pom.xml文件中的依赖配置
    B是依赖A的,在B的pom.xml文件中写入A的坐标
    <dependency>
        <groupId>com.A</groupId>
        <artifactId>A-model</artifactId>
        <version>0.0.1-SNAPSNOTL</version>
    </dependency>
    ------------------------------------
    C是依赖B的,在C的pom.xml文件中写入B的坐标
    <dependency>
        <groupId>com.B</groupId>
        <artifactId>B-model</artifactId>
        <version>0.0.1-SNAPSNOTL</version>
    </dependency>

    --A、B、C项目各自打包、编译,在C的项目的Maven dependencies引入中不仅会引入B,而且还会引入A项目,这就是依赖的传递。

    --如果项目C只想依赖B,不想依赖A怎么办?
    排除依赖:exclusions
    <exclusions>
        <exclusion>
            <groupId>com.A</groupId>
            <artifactId>A-model</artifactId>
            <version>0.0.1-SNAPSNOTL</version>
        <exclusion>
    <exclusions>
    这样在C项目编译后compile,就排出对A的依赖

  • Maven依赖冲突
    在传递依赖的原则下,A->B->C->X(jar) 路线1
                        A->D->X(jar) 路线2
    --原则1:短路优先,如果A需要导入一个依赖X,在路径中选择最短的。

    在传递依赖的原则下,A->B->X(jar) 路线1
                     A->C->X(jar) 路线2
    --原则2:在路径相同时,先声明先优先。如果A需要导入一个依赖X,1、2路线相同,在A中的pom.xml先声明B(C),就引入B(C)的X(jar)。
  • Maven项目的聚合
    在D项目中聚合 ABC三个项目
    D的pom.xml文件
    更改<package>pom</package>
    ...
    <modules>
        <module>../模块名</module>
        <module>../模块名</module>
        <module>../模块名</module>
    </moules>
时间: 2024-09-23 06:05:00

Maven的核心笔记(6)maven的传递、冲突、聚合的相关文章

Maven的核心笔记(1)配置Maven环境变量

Maven是啥? 1.Maven是一种项目构建管理工具,自动下载架包. 2.目前主流的项目构建工具:Maven.Ant.gradle. 3.两个主要概念:坐标--构件,仓库. 一.maven的环境 1.Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具,简单说--通过标签来自动管理架包.项目. 2.准备工作:下载maven,maven.apache.org 点击downloads下载,在版本中选择版本,Link下的apache-maven

Maven的核心笔记(4)maven的生命周期和常用标签

1.一个完整项目的构建过程包括: 清理.编译.测试.打包.集成测试.验证.部署. 在整个过程中存在怎样的生命周期? 2.Maven一共有三个生命周期,相互独立,每一个生命周期都有不同阶段. A.clean 清理项目 前中后 pre-clean .clean. post-clean B.default 构建项目 编译.测试.打包.部署 compile.test.package.install C.site 生成项目站点 前中后.部署到服务器 pre-site.site.post-site.site

Maven的核心笔记(2)原生:HelloWorldMaven

一.原生maven项目结构 Src (源代码目录) -1级-main -2级- java -3级-package(自定义的包) -1级-test(这个是测试代码) -2级-java -3级-package -1级-resources(资源文件的存放) 二.你的第一个源生HelloWordMaven: 我的项目是建立在( 纯手动创建目录)D:\zNewSoftware\JetBrains\code\maven01\src\main\java\com\luocheng\maven01\demo pa

Maven的核心笔记(5)maven的依赖范围

1.依赖的范围: 项目的三种classpath:编译.测试.运行 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> </dependen

Maven的核心笔记(3)常用命令、坐标和仓库

1.maven中常用的命令 mvn -v 查看maven的版本 compile编译(如果需要依赖其他包就需要自动下载) test测试 package 打包 clean 删除target包 install (安装jar包到本地仓库中) 2.在cmd中使用maven的archetype插件来创建项目结构(只需要了解) 一.maven的坐标和仓库 坐标:任何一个依赖,插件,项目构件的输出,都可称为构件,所有构件都以坐标作为地址. <groundId>项目名 <artifactId> 模块

《maven实战》学习笔记2——maven安装(windows和eclipse插件)

前言 由于我的工作中开发环境就是windows,IDE是eclipse,因此安装也只涉及和记录这两部分,在看书和动手的过程也就直接跳过其他部分. 笔记 windows中maven的安装 安装条件 maven依赖于java,因此安装和使用maven,要先确保已安装了jdk并配置好jdk的环境变量. 检查jdk是否安装并配好环境变量,可以再windows的cmd窗口执行java -version查看,如果如下所示,则证明jdk安装和配置正确. C:\Users\tzx>java -version j

MAVEN学习笔记之Maven插件的应用(4)

MAVEN学习笔记之Maven插件的应用(4) <build> <pluginManagement> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>sql-maven-plugin</artifactId> <version>1.5</version> <!-- 使用插件依然可以指定相应的依赖

MAVEN学习笔记之Maven生命周期和插件简介(3)

MAVEN学习笔记之Maven生命周期和插件简介(3) clean compile site三套生命周期相互独立. clean pre-clean 执行清理前的工作 clean 清理上一次构建生成的所有文件 post-clean 执行清理后的工作 compile validate generate-sources process-sources generate-resources process-sources process-resources 复制并处理资源文件,至目标目录,准备打包 co

《maven实战》学习笔记6——maven聚合和继承

maven聚合 为什么要用maven聚合 随着互联网的发展,一个项目的业务复杂度越来越高,整个项目的业务代码也会越来越庞大,因此便有了把一个项目拆分成若干个子项目的需求. 根据之前的知识,clean.test.package.install等都是针对单独的项目,那么对于上边若干个子项目可能就需要执行若干次的clean.test.package.install等操作,而这些操作具有很高的重复性. 介于这样的前提,便需要使用到maven聚合,经过一定的配置后,可以让我们每一次clean或者test或