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包,经过一系列百度教程才得以解决,现在总结一下 ...
随机推荐
- f5时间设置
方法一:NTP(推荐) 注:修改ntp server后大约需要10分钟左右才能同步成功. 查看ntp状态: 方法二:手动修改
- 8.16 val()和html()的问题
今天在做关闭模态框重置表单时,关闭模态框后输入框里的值还是在,不知道怎么回事? 感谢wd啦,原来我在初始化这个输入框的时候就写错了,输入框写值的时候用的是val(),而我和上面的div一样,用的是ht ...
- [leetcode]161. One Edit Distance编辑步数为一
Given two strings s and t, determine if they are both one edit distance apart. Note: There are 3 pos ...
- Java_8排序(冒泡排序和选择排序)
1.选择排序 package demo1; public class Demo1 { public static void main(String[] args) { int[] arr= {23,5 ...
- php的常量
系统常量 __FILE__ 当前PHP文件的相对路径 __LINE__ 当前PHP文件中所在的行号 __FUNCTION__ 当前函数名,只对函数内调用起作用 __CLASS__ 当前类名,只对类起作 ...
- go语言中常用的文件和文件夹操作函数
package main; import ( "os" "log" "time" "fmt" ) //一些常用的文件操作 ...
- Ubuntu安装时没注册root用户密码,怎么登录root
一.其实我个人认为这没有多大必要,因为当你需要 root 的权限时,使用 sudo 便可以了.如果你实在需要在 Ubuntu 中启用 root 帐号的话,那么不妨执行下面的操作: 1.重新设置 roo ...
- Jenkins构建.net项目
一.环境搭建 1.安装所需软件 Jenkins\JDK\GIT\VS\IIS\nginx(可选) 1.1 安装iis服务: 控制面板—>程序和功能—>启用或关闭windows功能,勾选所有 ...
- 使用Maven插件快捷打包发布远程Docker镜像 dockerfile-maven-plugin
1.开放远程Docker远程访问端口 # vim /lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H tcp://0.0. ...
- C单链表操作
#include <stdio.h> #include <stdlib.h> #define ElemType int #define Status int #define O ...