第4章 maven依赖特性

本章详细介绍maven的依赖特性和依赖范围,如何排除依赖。

4.1 什么是依赖传递

举个例子
在非maven项目中,你需要使用spring功能,你会想到导入spring的jar包,那么,srping又需要其他依赖jar包支持,所以你又需要去导入其他jar包,多次反复尝试启动项目后,你终于成功了!
maven项目就不需要这么麻烦,你只要在pom.xml文件中,引入spring相关配置,那么他会自动引入其他依赖jar包,这就是maven的依赖传递。

以下是一个配置文件,仅引入了spring和junit两个依赖配置,但maven已自动导入了其他的jar包


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.group</groupId><artifactId>simple</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>simple</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><org.springframework-version>3.1.0.RELEASE</org.springframework-version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${org.springframework-version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies>
</project>

4.2 依赖特性的特点

4.2.1 依赖范围

什么是依赖范围?
依赖范围指:决定依赖特性在构建的哪个阶段起作用。
举个例子,我需要做junit测试,所以需要引入junit相关jar,但我在发布项目时,我又不需要这个jar,所以(你有这个需求,maven肯定有这个解决办法),在配置时,需要指定依赖的范围。

在配置依赖时,scope标签就是用来规范依赖范围。

范围 描述
compile 默认值,适用于所有阶段,会随着项目一起发布。
provided 类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
runtime 只在运行时使用,如JDBC驱动,适用运行和测试阶段。
test 只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system 类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。

4.2.2 排除依赖

因为maven的依赖传递特性,所以很有可能一些你不需要的依赖也会包含在工程类路径中,为了解决这种情况,maven已经引入了依赖排除概念。

1. 如何使用排除依赖
在pom.xml文件中,<dependency>标签中加上<exclusions>标签


<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.5.1</version><exclusions><exclusion><groupId>tomcat</groupId><artifactId>jasper-runtime</artifactId></exclusion><exclusion><groupId>tomcat</groupId><artifactId>jasper-compiler</artifactId></exclusion></exclusions>
</dependency>

例如以上代码,在使用hadoop-common时,排除掉jasper-runtime, jasper-compiler两个依赖jar。

2.使用通配符进行依赖排除
有的时候,依赖过多,我们不需要一个个的去排除,可使用通配符来实现

<dependency><groupId>org.apache.phoenix</groupId><artifactId>phoenix-core</artifactId><version>4.5.0-HBase-1.0</version><exclusions><exclusion><groupId>org.mortbay.jetty</groupId><artifactId>*</artifactId></exclusion></exclusions>
</dependency>

例如以上代码,排除groupId 是org.mortbay.jetty的所有jar包。


首页传送门

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://www.cnblogs.com/jdbc/p/4975491.html

第4章 maven依赖特性相关推荐

  1. java继承eclipse_Java-Maven(七):Eclipse中Maven依赖、聚合、继承特性

    之前通过学习了解,maven集成到eclipse中的如何创建项目,以及maven命令插件在eclipse中安装后的用法.那么接下来我们将会学习一些maven在项目中的一些特性,及如何使用. Maven ...

  2. 漫画谈一下Maven依赖,百分之90的同学不知道!

    Maven 依赖排除(Exclusions) 因为 Maven 构建的项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: ...

  3. maven排除依赖包的子依赖_漫画谈一下Maven依赖

    Maven 依赖排除(Exclusions) 因为 Maven 构建的项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: ...

  4. JavaWeb --第四章Maven详解

    JavaWeb --第四章Maven详解 文章目录 Maven Maven架构管理工具 下载安装Maven 配置环境变量 阿里云镜像 本地仓库 在IDEA中使用Maven 创建一个普通的Maven项目 ...

  5. Maven依赖详细理解

    Maven依赖理解 1 简介 2 依赖的配置 3 依赖的范围 4 传递性依赖 4.1 传递性依赖和依赖调解 5 依赖调解 6 可选依赖 7 总结 8 下载 1 简介  在Maven项目中,有一个核心文 ...

  6. 第9章 maven的插件和生命周期

    第9章 maven的插件和生命周期 本章介绍了maven生命周期.插件以及如何配置插件 9.1 生命周期 一般的项目都会经历这几个步骤:编译,测试,打包,部署,有些公司是手动方式,有些是自动化脚本方式 ...

  7. Maven依赖原则及如何解决Maven依赖冲突

    前言 在大数据应用中,现在发现依赖关系非常复杂,在上线之前很长测试,前一段时间在部署udf 出现了导致生产Hiveserver2 宕机问题,出现严重事故.现在就咨询研究一下.Maven虽然已经诞生多年 ...

  8. Maven依赖解析之倍增提速,eBay Velocity实践的开源新算法

    Maven 作为程序员所熟悉的构建工具,在eBay内部同样被广泛使用.maven-resolver 是Maven的核心组件.它将项目声明的所有依赖 (dependency) 予以解析,算得依赖图 (d ...

  9. Maven 依赖冲突那些事

    详细带你了解 Maven 依赖冲突的问题原因,以及解决办法.并教你生产碰到这类的问题实战技巧. 0x00. 前言 依赖冲突是日常开发中经常碰到的过程,如果运气好,并不会有什么问题.偏偏小黑哥有点背,碰 ...

最新文章

  1. Shell排序的原理与集体实现
  2. Xib/Storyboard碰到不同版本的Xcode真是想死啊!
  3. python小老鼠编程_邯郸pythonnot学习费用多少
  4. qldump 备份所有表_MySQL中的备份和恢复是怎样执行的?
  5. OpenNI体感应用开发实战 (Kinect相机)
  6. 几年的写论文和审稿心得
  7. mysql金钱默认字段格式化_在SQL数据库中,设置了一个字段的类型为money,但是money类型数据保留的是四位小数,如何设置为两位小数?...
  8. 符号“”和const在函数里不同位置的用法
  9. Android面试总结
  10. 2017中国之旅系列之十一:山西绵山之旅(上)
  11. Android MediaProjection 代码分析
  12. 明明有 Windows 11,为什么还要用国产操作系统?
  13. aptana安装python库_使用Aptana搭建Python开发环境
  14. 局域网有一台计算机网络慢,局域网网速变慢的五种解决办法
  15. 国产旗舰手机定价近六千,却连iPhone12都打不过,用户选谁很明确
  16. 计算机电脑照片大小,电脑上怎么调整照片kb
  17. SQL语句操作练习(一)
  18. 冰河亲自整理的Git命令汇总,悄悄努力,然后惊艳所有人
  19. 通过jsp向mysql批量导入数据_通过JSP+JavaBean对mysql进行添加数据的操作
  20. 人脸识别门禁有哪些功能呢?

热门文章

  1. JS实战 · 复选框全选操作
  2. Oracle 基础 —SQL语句优化的途径
  3. LinkedHashMap 根据PUT顺序排序Map
  4. 2013搜狗校园招聘笔试题
  5. 智能提示和那些值得崇拜的人
  6. java 两个字段排序,如何在Java中按两个字段排序?
  7. python写入数据的一种措施_Python 文件数据读写的具体实现
  8. JAVA错误:无法从静态上下文中引用非静态变量 this
  9. MATLAB安装第三方工具箱
  10. flink sql设置并行度_《从0到1学习Flink》—— Flink parallelism 和 Slot 介绍