第4章 maven依赖特性
第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依赖特性相关推荐
- java继承eclipse_Java-Maven(七):Eclipse中Maven依赖、聚合、继承特性
之前通过学习了解,maven集成到eclipse中的如何创建项目,以及maven命令插件在eclipse中安装后的用法.那么接下来我们将会学习一些maven在项目中的一些特性,及如何使用. Maven ...
- 漫画谈一下Maven依赖,百分之90的同学不知道!
Maven 依赖排除(Exclusions) 因为 Maven 构建的项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: ...
- maven排除依赖包的子依赖_漫画谈一下Maven依赖
Maven 依赖排除(Exclusions) 因为 Maven 构建的项目具有依赖可传递的特性,当你在 pom.xml添加某个依赖时,可能也会引入不需要的依赖到你的项目中,这将会会可能引起如下问题: ...
- JavaWeb --第四章Maven详解
JavaWeb --第四章Maven详解 文章目录 Maven Maven架构管理工具 下载安装Maven 配置环境变量 阿里云镜像 本地仓库 在IDEA中使用Maven 创建一个普通的Maven项目 ...
- Maven依赖详细理解
Maven依赖理解 1 简介 2 依赖的配置 3 依赖的范围 4 传递性依赖 4.1 传递性依赖和依赖调解 5 依赖调解 6 可选依赖 7 总结 8 下载 1 简介 在Maven项目中,有一个核心文 ...
- 第9章 maven的插件和生命周期
第9章 maven的插件和生命周期 本章介绍了maven生命周期.插件以及如何配置插件 9.1 生命周期 一般的项目都会经历这几个步骤:编译,测试,打包,部署,有些公司是手动方式,有些是自动化脚本方式 ...
- Maven依赖原则及如何解决Maven依赖冲突
前言 在大数据应用中,现在发现依赖关系非常复杂,在上线之前很长测试,前一段时间在部署udf 出现了导致生产Hiveserver2 宕机问题,出现严重事故.现在就咨询研究一下.Maven虽然已经诞生多年 ...
- Maven依赖解析之倍增提速,eBay Velocity实践的开源新算法
Maven 作为程序员所熟悉的构建工具,在eBay内部同样被广泛使用.maven-resolver 是Maven的核心组件.它将项目声明的所有依赖 (dependency) 予以解析,算得依赖图 (d ...
- Maven 依赖冲突那些事
详细带你了解 Maven 依赖冲突的问题原因,以及解决办法.并教你生产碰到这类的问题实战技巧. 0x00. 前言 依赖冲突是日常开发中经常碰到的过程,如果运气好,并不会有什么问题.偏偏小黑哥有点背,碰 ...
最新文章
- Shell排序的原理与集体实现
- Xib/Storyboard碰到不同版本的Xcode真是想死啊!
- python小老鼠编程_邯郸pythonnot学习费用多少
- qldump 备份所有表_MySQL中的备份和恢复是怎样执行的?
- OpenNI体感应用开发实战 (Kinect相机)
- 几年的写论文和审稿心得
- mysql金钱默认字段格式化_在SQL数据库中,设置了一个字段的类型为money,但是money类型数据保留的是四位小数,如何设置为两位小数?...
- 符号“”和const在函数里不同位置的用法
- Android面试总结
- 2017中国之旅系列之十一:山西绵山之旅(上)
- Android MediaProjection 代码分析
- 明明有 Windows 11,为什么还要用国产操作系统?
- aptana安装python库_使用Aptana搭建Python开发环境
- 局域网有一台计算机网络慢,局域网网速变慢的五种解决办法
- 国产旗舰手机定价近六千,却连iPhone12都打不过,用户选谁很明确
- 计算机电脑照片大小,电脑上怎么调整照片kb
- SQL语句操作练习(一)
- 冰河亲自整理的Git命令汇总,悄悄努力,然后惊艳所有人
- 通过jsp向mysql批量导入数据_通过JSP+JavaBean对mysql进行添加数据的操作
- 人脸识别门禁有哪些功能呢?