maven坐标Dependencies和Exclusions的使用

目录
  • 1、概念介绍
  • 2、Dependencies
    • (1)当一个项目A依赖另一个项目B时
    • (2)配置可选依赖的原因
    • (3)示例
  • 3、Exclusions
    • (1)当一个项目A依赖项目B
    • (2)示例
  • 4、maven的依赖调解有两大原则
  • 5、maven的归类依赖
  • 聊下maven Exclusions标签

1、概念介绍

  • Dependencies:是可选依赖(Optional Dependencies)
  • Exclusions:是依赖排除(Dependency Exclusions)

2、Dependencies

(1)当一个项目A依赖另一个项目B时

项目A可能很少一部分功能用到了项目B,此时就可以在A中配置对B的可选依赖。举例来说,一个类似hibernate的项目,它支持对mysql、oracle等各种数据库的支持,但是在引用这个项目时,我们可能只用到其对mysql的支持,此时就可以在这个项目中配置可选依赖。

(2)配置可选依赖的原因

1)节约磁盘、内存等空间;

2)避免license许可问题;

3)避免类路径问题,等等。

(3)示例

<project>
  ...
  <dependencies>
    <!-- declare the dependency to be set as optional -->
    <dependency>
      <groupId>sample.ProjectB</groupId>
      <artifactId>Project-B</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <optional>true</optional> <!-- value will be true or false only -->
    </dependency>
  </dependencies>
</project>

  

假设以上配置是项目A的配置,即:Project-A –> Project-B。在编译项目A时,是可以正常通过的。如果有一个新的项目X依赖A,即:Project-X -> Project-A。此时项目X就不会依赖项目B了。如果项目X用到了涉及项目B的功能,那么就需要在pom.xml中重新配置对项目B的依赖。假设A->B, B->x(可选), B->y(可选)。这里由于x,y是可选依赖,依赖不会传递,x,y将不会对a有任何影响

3、Exclusions

(1)当一个项目A依赖项目B

而项目B同时依赖项目C,如果项目A中因为各种原因不想引用项目C,在配置项目B的依赖时,可以排除对C的依赖。

(2)示例

假设配置的是A的pom.xml,依赖关系为:A –> B; B –> C:

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>sample.ProjectB</groupId>
      <artifactId>Project-B</artifactId>
      <version>1.0</version>
      <scope>compile</scope>
      <exclusions>
        <exclusion>  <!-- declare the exclusion here -->
          <groupId>sample.ProjectC</groupId>
          <artifactId>Project-C</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
</project>

4、maven的依赖调解有两大原则

路径最近者优先;第一声明者优先。

5、maven的归类依赖

<properties>
<springframework.version>2.5.6<springframework.version>
</properties>

定义此属性值后,maven会将pom中的所有的${springframework.version}替换成实际值2.5.6

聊下maven Exclusions标签

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>test.groupId</groupId>
      <artifactId>test-artifactId</artifactId>
      <version>1.0.0</version>
      <exclusions>
        <exclusion>
          <groupId>test.groupId</groupId>
          <artifactId>test-artifactId-2</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>
</project>

如上maven代码示:

在项目中依赖引用了test-artifactId,但是不想使用test-artifactId中的test-artifactId-2,我们可以使用exclusions标签标注(这是个list标签,允许多个exclusion标签),这里,exclusion了test-artifactId-2。

注意

如果使用了exclusions标签对test-artifactId-2标注,并且自己的项目没有显示的声明test-artifactId-2的依赖,test-artifactId的代码又需要test-artifactId-2。

test-artifactId包也没有直接把test-artifactId-2依赖打包在test-artifactId-2中,这个时候,test-artifactId使用的时候就会发送NotClassFound!!!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 关于Maven依赖冲突解决之exclusions

    目录 Maven依赖冲突解决之exclusions 1. 背景 2. 解决方式 场景 解决方式 Maven解决依赖冲突总结 实例分析 解决办法 命令分析 小试牛刀 Maven依赖冲突解决之exclusions 1. 背景 作为java生态下开发者,往往需要使用大量线程的第三方库,一般都是以jar包形式存在. maven作为事实上主流的jar包依赖管理工具,Idea和Eclipse都支持创建maven工程来管理jar包依赖. 使用maven进行jar包依赖管理时,maven会自行管理jar包及其依

  • 详解maven依赖冲突以及解决方法

    什么是依赖冲突 依赖冲突是指项目依赖的某一个jar包,有多个不同的版本,因而造成类包版本冲突 依赖冲突的原因 依赖冲突很经常是类包之间的间接依赖引起的.每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突 如何解决依赖冲突 首先查看产生依赖冲突的类jar,其次找出我们不想要的依赖类jar,手工将其排除在外就可以了.具体执行步骤如下 1.查看依赖冲突 a.通过dependency:tree是命令来检查版本冲突 mvn -Dverbose dep

  • 聊聊maven的pom.xml中的exclusions标签的作用

    maven pom.xml的exclusions标签作用 项目中的例子 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupI

  • 深入理解Maven的坐标与依赖

    在前边两节中,我们学习了Maven的基本概念以及何为Maven仓库,并且如何配置settings.xml文件等相关知识点.Maven的主要作用是可以帮助我们自动下载在pom.xml中配置添加的依赖.那么在本节中,我们将学习如何引入依赖. 知识点包括: Maven的坐标,Maven的依赖配置,依赖范围,传递性依赖,依赖调解,可选依赖,排除依赖,归类依赖和优化依赖 Maven的坐标 Maven的仓库中拥有着无数的构件,每一个构件都是一个jar或者war等文件,如果没有坐标,那么我们将无法唯一标识该构

  • maven坐标Dependencies和Exclusions的使用

    目录 1.概念介绍 2.Dependencies (1)当一个项目A依赖另一个项目B时 (2)配置可选依赖的原因 (3)示例 3.Exclusions (1)当一个项目A依赖项目B (2)示例 4.maven的依赖调解有两大原则 5.maven的归类依赖 聊下maven Exclusions标签 1.概念介绍 Dependencies:是可选依赖(Optional Dependencies) Exclusions:是依赖排除(Dependency Exclusions) 2.Dependenci

  • 详解Maven项目Dependencies常见报错及解决方案

    个人最近项目中所遇到的问题,记录下便自己和同样遇到问题的小伙伴提供一个参考. 通常Maven里报红波浪线的常见问题 ①可能是子工程没有继承父工程 注意父工程中有中对应的module: <groupId>com.fred.parent</groupId> <artifactId>mall</artifactId> <version>1.0-SNAPSHOT</version> <modules> <module>

  • IDEA中的maven没有dependencies解决方案

    目录 IDEA maven没有dependencies IDEA导入新项目没有dependencies跟plugins 解决办法 IDEA maven没有dependencies IDEA导入新项目没有dependencies跟plugins 如图: 解决办法 网上方法很多,重新导入model,父工程关联问题等方法,都无效 直接点开右侧maven设置,点击lifecycle里的compile,然后等待下载完 compile完成后点击maven设置左上角的刷新,初始化完后,dependencies

  • MyBatis框架零基础快速入门案例详解

    目录 一.创建数据库和表 二.创建maven工程 三.代码编写 1.编写Student实体类 2.编写DAO接口StudentDao 3.编写DAO接口Mapper映射文件StudentDao.xml. 4.创建MyBatis主配置文件 四.创建测试类进行测试 1.创建测试类MyBatisTest 2.配置日志功能 五.增删改操作 insert操作 MyBatis下载地址:https://github.com/mybatis/mybatis-3/releases 一.创建数据库和表 数据库名ss

  • 一篇文章带你了解Maven的坐标概念以及依赖管理

    目录 1.什么是坐标? ①.数学中的坐标 ②.Maven 中的坐标 ③.Maven 坐标和仓库,jar 包的关系 2.什么是依赖? 3.依赖的详细配置 4.依赖的范围 scope 1.compile 范围依赖 2.test 范围依赖 3.provided 范围依赖 4.runtime 范围依赖: 5.依赖的传递 我们这里举个例子来看: ①.第二依赖范围是 test ②.第二依赖范围是 compile 6.依赖的排除 7.依赖的冲突 8.可选依赖 总结 1.什么是坐标? ①.数学中的坐标 在平面上

  • Maven pom.xml与settings.xml详解

    pom.xml与settings.xml pom.xml与setting.xml,可以说是Maven中最重要的两个配置文件,决定了Maven的核心功能,虽然之前的文章零零碎碎有提到过pom.xml和settings.xml里面的内容,但都是大略带过,学习与研究地并不细致,本文的目的就是详细研究下这两个Maven重要的配置文件,从这两个配置文件可以牵出非常多的Maven话题.  Maven坐标 首先谈一下为什么要使用Maven坐标. Maven世界拥有数量非常巨大的构件,也就是平时使用的一些jar

  • Maven中pom.xml配置文件详细介绍

    setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件:而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件. 基础配置 一个典型的pom.xml文件配置如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org

  • 关于Maven的使用,这些你都真的了解么

    Maven使用说明及规范 此文档主要说明Maven的基础使用方式,以及在使用过程过程中需要遵守哪些默认的准则. 我们工作中会经常写maven的配置,但是很多maven使用细节你可能并不知道,但你掌握后使用maven会更加上手. MAVEN是什么? Apache Maven是一个软件项目管理工具.基于项目对象模型(POM)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档. Maven的核心是一个插件执行框架, 所有工作都是通过插件完成的. 最熟悉的插件如我们比较常用的: cle

随机推荐