第4章 maven依赖特性

第4章 maven依赖特性

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

4.1 什么是依赖传递

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

Alt text

以下是一个配置文件,仅引入了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>

Alt text

4.2 依赖特性的特点

4.2.1 依赖范围

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

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

Alt text

范围描述
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375391.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lintcode :Integer to Roman 整数转罗马数字

题目 整数转罗马数字 给定一个整数&#xff0c;将其转换成罗马数字。 返回的结果要求在1-3999的范围内。 样例 4 -> IV 12 -> XII 21 -> XXI 99 -> XCIX 更多案例&#xff0c;请戳 http://literacy.kent.edu/Minigrants/Cinci/romanchart.htm 说明 什么是 罗马数字…

VRRP协议具体解释

转帖&#xff1a;http://blog.chinaunix.net/space.php?uid11654074&doblog&id2857384 Contents Page 文件夹 入木三分学网络…

WPF笔记(1.1 WPF基础)——Hello,WPF!

WPF笔记(1.1 WPF基础)——Hello&#xff0c;WPF&#xff01; 原文:WPF笔记(1.1 WPF基础)——Hello&#xff0c;WPF&#xff01;Example 1-1. Minimal C# WPF application//MyApp.csusingSystem;usingSystem.Windows; //the root WPF namespacenamespaceMyFirstAvalonApp { cla…

c#入门系列——类和对象的代码实现

面向对象 说起面向对象&#xff0c;大家因该都听说过&#xff0c;也知道是一个编程的方法&#xff0c;简称oop技术。它将对象的算法和数据结构看作一个整体&#xff0c;而一个程序就是由多个对象结合的整体。这样做可以提高代码的复用率&#xff0c;提高了软件的可维护性。 属性…

安卓TCP通信版本2

PC做服务器&#xff0c;安卓做客户端。 安卓获取输入框的内容并发送&#xff0c;然后等待接收服务器的消息 服务器先行开启&#xff0c;接收到客户端的数据&#xff0c;然后回复消息。 实现了对线程类的封装&#xff0c;通过按钮启动线程发送并接收 服务器代码&#xff08;java…

简述WebService的使用(一)

环境&#xff1a; vs版本&#xff1a;vs2013 windows版本&#xff1a;win7 IIS版本&#xff1a;IIS7.0 &#xff08;如果觉得对您有用&#xff0c;请点击右下角【推荐】一下&#xff0c;让更多人看到&#xff0c;谢谢&#xff09; 配置环境&#xff1a; 主要针对于IIS 首先&…

透过WinDBG的视角看String

摘要 : 最近在博客园里面看到有人在讨论 C# String的一些特性. 大部分情况下是从CODING的角度来讨论String. 本人觉得非常好奇, 在运行时态, String是如何与这些特性联系上的. 本文将侧重在通过WinDBG来观察String在进程内的布局, 以此来解释C# String的一些特性. 问题 C# Stri…

ueditor富文本编辑器 修改框宽度和高度的方法

在使用ueditor的时候&#xff0c;用的textarea <textarea name"content" id"myEditor">这里写这条规则的回复内容</textarea> 给它加style"width:300" 属性的时候&#xff0c;发现不起作用。 正确的方法应该是&#xff1a; <scri…

Win32ASM学习[9]: 标志寄存器

TF(Trap Flag)——位8&#xff0c;跟踪标志。置1 则开启单步执行调试模式&#xff0c;置0 则关闭。在单步执行模式下&#xff0c;处理器在每条指令后产生一个调试异常&#xff0c;这样在每条指令执行后都可以查看执行程序的状态。如果程序用POPF、POPFD 或者ET 指令设置TF 标志…

JavaScript消息框

1.警告框 function myTest(){alert("这里的内容会弹出");} 2.确认框 其返回的值是 true 或 false 。 function myTest(){confirm("这里的内容会弹出");} 3.提示框 prompt prompt(参数1&#xff0c;参数2)&#xff1a;其参数1 是显示提示要输入的信息&…

.Net 事务

在分布式应用程序中&#xff0c;不可避免地会经常使用到事务控制。事务有一个开头和一个结尾&#xff0c;它们指定了事务的边界&#xff0c;事务在其边界之内可以跨越进程和计算机。事务边界内的所有资源都参与同一个事务。要维护事务边界内资源间的一致性&#xff0c;事务必须…

Android WifiDisplay分析一:相关Service的启动

网址&#xff1a;http://www.2cto.com/kf/201404/290996.html 最近在学习Android 4.4上面的WifiDisplay(Miracast)相关的模块&#xff0c;这里先从WifiDisplay用到的各个Service讲起&#xff0c;然后再从WifiDisplaySettings里面讲解打开wfd的流程。首先看下面的主要几个Servic…

Cortex-A15 Memory Hierarchy

ARM 平台为实现速度和成本的平衡&#xff0c;使用多个层次的内存架构。对于多核 CPU 组成的 SOC&#xff0c;每个CPU 内部都有一组高速缓存&#xff0c;包含&#xff1a;ICache、DCache 和 TLB。多个 CPU 共享一个更大的 L2 缓存。L2缓存再和 CPU 外部的DDR3 内存交互。ICache …

Android 图片的缩略图

<1>简介 之前往往是通过Bitmap、Drawable和Canvas配合完成&#xff0c;需要写一系列繁杂的逻辑去缩小原有图片&#xff0c;从而得到缩略图。 现在我给大家介绍一种比较简单的方法&#xff1a;&#xff08;网上有&#xff09; 在Android 2.2版本中&#xff0c;新增了一个T…

《JavaScript权威指南》学习笔记 第二天 下好一盘大棋

前段学习js的时候总是零零散散的&#xff0c;以至于很多东西都模棱两可。时间稍微一久&#xff0c;就容易忘记。最主要的原因是这些东西&#xff0c;原来学的时候就不是太懂&#xff0c;以至于和其他知识无法形成记忆链&#xff0c;所以孤零零的知识特别容易忘记。重温犀牛书&a…

SUID或SGID程序中能不能用system函数

system()函数的声明和说明如下&#xff1a; 注意它的描述那里&#xff0c;system()执行一个由command参数定义的命令&#xff0c;通过调用/bin/sh -c命令来实现这个功能。也就是说它的逻辑是这样的&#xff01; 进程调用system函数&#xff0c;system函数调用fork创建一个子进程…

Xamarin iOS编写第一个应用程序创建工程

Xamarin iOS编写第一个应用程序创建工程 在Xcode以及Xamarin安装好后&#xff0c;就可以在Xamarin Studio中编写程序了。本节将主要讲解在Xamarin Studio中如何进行工程的创建以及编写代码等内容XamariniOS编写第一个应用程序创建工程本文选自Xamarin iOS开发实战大学霸。 1.3.…

Birt使用总结

把report放到其他服务器要重新建立Data Source ,这是配置&#xff0c;拷贝项目时不会同时拷贝 (1)在EXTJs中利用Report实现报表的刷新 Ext.getCmp("showview").body.update("<iframe idshowviewframe src" "> </iframe>"…

【线性代数公开课MIT Linear Algebra】 第二十三课 微分方程与exp(At)

本系列笔记为方便日后自己查阅而写&#xff0c;更多的是个人见解&#xff0c;也算一种学习的复习与总结&#xff0c;望善始善终吧~ 一阶常系数微分方程 Aududt 将一阶常系数微分方程转换为线性代数问题的关键在于常系数微分方程的解一定是指数形式的。那么我们的需要求解的东西…

iOS学习之基本概念

学习iOS最重要的是态度和兴趣&#xff0c;如果你对于学习始终抱有不断的热情和端正的态度&#xff0c;那么&#xff0c;无论是什么&#xff0c;你总会成功的&#xff01; 有一句话与大家共勉&#xff1a;过程中跌倒多少次都没有关系&#xff0c;重要的是&#xff0c;跌倒后你能…