maven下的经常使用的几个元素以及依赖范围的一些知识
maven的pom.xml配置文件里面的project根节点下的dependencies可以包含一个或者多个dependency元素,以声明一个或者多个依赖,每个依赖都可以包含的元素:
groupId,artifactId和version:依赖的基本坐标,对于任何依赖来说,基本坐标最重要,maven根据坐标才能找到对应的依赖;
type:依赖的类型,对应项目坐标定义的packaging,大部分情况下无须声明,默认是jar;
scope:依赖的范围;
optional:标记依赖是否可选;
exclusions:用来排除传递性依赖;
一般情况下,大部分依赖声明只包含基本坐标,一些特殊情况,其他元素的地位也至关重要;
下面是scope元素的几个参数,都有自己的范围,超出范围将会无效:
compile:编译依赖范围,若未指定依赖范围,会默认该依赖范围,使用该依赖范围的maven依赖,对于编译、测试、运行的classpath都有效;比较典型的就是spring-core,在编译、测试和运行项目的时候都需要使用到该依赖;
test:测试依赖范围,使用该依赖范围的maven依赖,只对测试的classpath有效;典型的就是Junit,它只有在编译测试代码的时候才有效;
provided:已提供依赖范围,使用该依赖范围的maven依赖,只对编译和测试的classpath有效,但在运行时无效;典型的就是servlet-api,编译和测试的时候需要该依赖,但在运行项目的时候,由于容器已经提供了,就不需要maven重复的引入一遍;
runtime:运行时依赖范围,使用此类范围的maven依赖,对于测试和运行的classpath有效,但在编译主代码的时候无效。典型的例子是JDBC驱动的实现,项目住代码只需要JDK提供JDBC的接口,只有在测试或者运行项目的时候才需要实现上述接口的具体实现;
system:系统依赖范围,使用此类范围的maven依赖,也是对应编译和测试的classpath有效,运行时无效,但是使用该范围的依赖,必须显式的通过systemPath指定依赖的路径(因为此类依赖不是通过maven仓库解析的,而往往与本地机绑定,可移植性比较差,谨慎使用),可以引用环境变量,例子如下:
<dependency>
<groupId>javax.sql</groupId>
<artifactId>jdbc-stdext</artifactId>
<version>2.0</version>
<scope>system</scope>
<systemPath>${jave.home}/lib/rt.jar</systemPath>
</dependency>
以下是一个简单的表格(Y代表有效,N代表无效);
依赖范围(scope) | 对于编译classpath有效 | 对于测试classpath有效 |
对于运行classpath有效 |
典型例子 |
compile | Y | Y | Y | spring-core |
test | N | Y | N | Junit |
provided | Y | Y | N | servlet-api |
runtime | N | Y | Y | JDBC驱动实现 |
system | Y | Y | N | 本地的,Maven仓库以外的类库文件 |
maven下的经常使用的几个元素以及依赖范围的一些知识的更多相关文章
- Maven下java.lang.NoClassDefFoundError
本文转载自:http://blog.csdn.net/qqhjqs/article/details/51491516 使用maven管理web项目中jar包之间的依赖,非常的方便好用,但是有时也会出现 ...
- maven下拉项目不能同步
maven下拉项目不能同步,如下图: 解决方法: 对项目右键,team, 选择这里 我选择第一项,有的需要根据情况选择第二项,如果点击完成后,还是不能同步代码,对项目右键,team,disconnec ...
- JavaScript向select下拉框中加入和删除元素
JavaScript向select下拉框中加入和删除元素 1.说明 a 利用append()方法向下拉框中加入元素 b 利用remove()方法移除下拉框中最后一个元素 2.设计源代码 < ...
- JavaScript向select下拉框中添加和删除元素
JavaScript向select下拉框中添加和删除元素 1.说明 a 利用append()方法向下拉框中添加元素 b 利用remove()方法移除下拉框中最后一个元素 2.设计源码 < ...
- npm install 命令。默认会找到当前路径下的package.json。然后安装其中的依赖
npm install 命令.默认会找到当前路径下的package.json.然后安装其中的依赖 By default, npm install will install all modules li ...
- maven下读取资源文件的问题(转)
原文链接:http://shenchao.me/2016/04/20/maven%E4%B8%8B%E8%AF%BB%E5%8F%96%E8%B5%84%E6%BA%90%E6%96%87%E4%BB ...
- Maven下使用Jetty进行Debug
1.环境和条件 Maven-3.0.3Eclipse请阅读者事先具备一定maven知识 2 配置2.1 添加Jetty插件 在pom.xml中加入如下代码段 <plugin> <gr ...
- maven下配置pom.xml
博主原创,转载请注明. 遇到的问题: 缺少依赖库.解决办法: 在build标签中添加: <plugin> <groupId>org.apache.maven.plugins&l ...
- maven下的sqlserver配置jar包
看了两天的maven,开始把之前做的ssm项目搭建成maven项目,结果在sqlserver的依赖包上受阻,sqlserver需要sqljdbc4.jar包,经过一系列百度教程才得以解决,现在总结一下 ...
随机推荐
- 成对使用new和delete,传值传引用
首先: delete []p;是用来删除对象数组的,特别是你声明的是对象数组!!! 如果new中用了[],delete一定要用[]:在new中没有使用,在delete中一定不要使用. 其次: 当你使用 ...
- Java_10.1继承应用
/* * 描述学生和工人两个类 name age进行抽取 ,父类 Person 提供set get * 同时创建学生和工人对象 必须明确年龄和姓名 并且控制台输出 * */ ...
- centos更换yum源为aliyun源
国外的yum源由于众所周知的GFW原因,有的被墙,有的很慢,阿里云依靠强大的技术优势建立了国内的开源镜像.阿里云Linux安装镜像源地址:http://mirrors.aliyun.com/ 第一步: ...
- spring+quartz报错:Table 'XXXX.QRTZ_TRIGGERS' doesn't exist
Spring4.3.4 + quartz2.2.1配置到application.xml中 <properties> <spring.version>4.3.4.RELEASE& ...
- BCH/BSV coin split troubleshooting
BCH/BSV coin split troubleshootingMark Lundeberg 2018 November 27ResourcesGuides:Locktime based spli ...
- ThreeJS中的点击与交互——Raycaster的用法
基础概念 坐标系 我们的手机屏幕是二维的,但是我们展示物体的世界是三维的,当我们在构建一个物体的时候我们是以一个三维世界既是世界坐标来构建,而转化为屏幕坐标展示在我们眼前,则需要经历多道矩阵变化,中间 ...
- 洛谷1288 取数游戏II
原题链接 因为保证有\(0\)权边,所以整个游戏实际上就是两条链. 很容易发现当先手距离\(0\)权边有奇数条边,那么必胜. 策略为:每次都将边上权值取光,逼迫后手向\(0\)权边靠拢.若此时后手不取 ...
- C语言学习第一天~Eclipse MinGW环境搭建
一.环境准备 windows 二.Windows环境下gcc编译器 1.MinGW介绍 MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环境,它是Minimalist ...
- NC 5系查询引擎做报表
在集团下打开查询引擎管理节点,选中查询设计,鼠标移动到创建,点击文件夹 文件夹名字按需求起,创好文件夹后选中该文件夹后鼠标移动到创建,点击对象. 按需求起好编码和名称 都创建好后,点击SQL手工设计 ...
- win10无法访问别的机器的共享目录
Win + R 输入 regedit Open Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstat ...