问题介绍:

  在maven项目中,最关键的就是pom.xml这个文件,这个文件是用来导入maven项目依赖的jar包以及一些插件等。

  在这个文件中导入jar包使用的标签是<dependency>,而在这个标签下有一个子标签,叫做<scope>,它是有什么用处呢?下面我就来讲讲它的作用。

      

内容讲解:

  <scope>这个标签的主要作用有三个:

     1、确定导入的jar包的有效区域。这里说的区域分别为:

      a)主程序区域:

        

      b)测试程序区域:

        

     2、是否参与maven项目的打包:

    项目要部署到服务器上,是需要先将项目打包的。然而,并不是你导入项目的所有Jar包都需要一同被打包,比如junit这个专门用来编写测试的包及其依赖,就没有必要一起打包进项目中。使用scope的不同取值就能告诉maven哪些jar包需要被一同打包,哪些不用。

  <scope>标签的取值(只介绍主要的三种):

    1、compile(默认)

      导入的jar对主程序是否有效:有效

      导入的jar对测试程序是否有效:有效

      是否参与项目的打包:参与

      例如:在maven项目中使用了sping等第三方的jar包,则需要一同打包再部署到服务器。

    2、test  

      导入的jar对主程序是否有效:无效

      导入的jar对测试程序是否有效:有效

      是否参与项目的打包:参与

      例如:junit包,只在开发中测试使用,并不需要打包到服务器。

      注:在eclipse中,若<scope>的取值若为test,则在右侧目录中,包会显示为灰色。如下图:

    3、provided

      导入的jar对主程序是否有效:有效

      导入的jar对测试程序是否有效:有效

      是否参与项目打包:不参与

      例如:servlet-api,tomcat服务器自带,会自动添加到你部署的项目中,你开发项目时要用吗,但是不需

         要一起打包。

注意:

  <scope>中的值不能随便乱写,需要合理的选择,否则程序可能会出现错误。比如说,如果在导入一些Tomcat服务器自带的依赖(如:servlet-api)时使用了compile这个取值,项目运行时就会产生错误,因为Tomcat自带这些依赖,而你还将自己额外加入的相同的依赖部署到Tomcat下,两者就会差生冲突。而若是你在导入一些Tomcat没有但程序运行时需要的依赖时,使用了test或者provided,也会出错,因为这些依赖将不会一起被打包部署到Tomcat下,运行时就将找不到这些依赖。

scope对依赖传递的影响

  什么是依赖传递?

  就是假设你有一个maven项目叫A,你在这个项目中添加了一个依赖,这个依赖是你的另一个maven项目B,你在这个被依赖的项目B中添加一些依赖,这些依赖也会自动地添加到A中,这就是依赖传递。简单来说就是你的依赖的依赖也会成为你的依赖。

  

  <scope>标签的取值对依赖传递有什么影响呢?

  这个影响就是,只有当依赖的scope标签被定义为compile时才会发生依赖传递,而定义为test或者provided都不会发生依赖传递。

理解maven项目的pom.xml文件中,<scope>标签的作用——作用域以及依赖传递的更多相关文章

  1. 如何在maven项目的pom.xml文件中添加jar包

    在使用maven进行项目开发时,我们需要在pom.xml文件中添加自己所需要的jar包.这就要求我们获取jar包的groupId和artifactId. 我们可以在一些maven仓库上搜索我们所需要的 ...

  2. maven项目的pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0 " 2 xmlns:xsi="http://www.w3.org ...

  3. maven spark Scala idea搭建maven项目的 pom.xml文件配置

    1.pom.xml文件配置,直接上代码. <?xml version="1.0" encoding="UTF-8"?> <project xm ...

  4. springMVC+Mybatis的maven-web项目的pom.xml文件内容

    pom.xml文件内容 <!-- 第一行是XML头,指定了该xml文档的版本和编码方式 --> <project xmlns="http://maven.apache.or ...

  5. maven(四):一个基本maven项目的pom.xml配置

    继续之前创建的test项目,一个基本项目的pom.xml文件,通常至少有三个部分 第一部分,项目坐标,信息描述等 <modelVersion>4.0.0</modelVersion& ...

  6. Maven项目的pom.xml配置文件格式初识

    Maven项目 有pom.xml文件的项目就已经是一个maven项目了,但是还没有被maven托管,我们需要将该项目添加为maven项目 <project xmlns="http:// ...

  7. 【Maven】在pom.xml文件中使用resources插件的小作用

    在spring boot创建web项目打包为jar包的过程中,是不会把webapp目录下的页面也打包进去的,这个时候接触到了maven的 resources插件. ================== ...

  8. pom.xml文件中dependency标签的scope子标签

    1.最近整合了公司的一个项目A,而A又依赖项目B,项目B中pom.xml中有一个依赖的<scope>provided</scope>,查了一下,原来provided属性,jar ...

  9. 关于Maven项目的pom.xml中的依赖或插件失效的解决方法

    1.请将<dependency>标签包含的依赖从<dependencyManagement>中拿出来,单独放在<dependencies>标签里面.2.请将< ...

随机推荐

  1. CSS3 弹性盒模型 box-flex

    说明:本文档兼容性测试基础环境为:windows系统:IE6-IE10, Firefox6.0, Chrome13.0, Safari5.1, Opera11.51 语法: box-flex:< ...

  2. github page更新后不生效

    昨晚在本地git仓库修改了页面内容后,git push上去,到页面去刷新发现,并没有改变.本来还想着是需要点时间来更新,就再等等. 没想到过了十几分钟后,还是没有更新. 然后同时习惯性地打开了邮箱,发 ...

  3. git pull 免密

    linux下 在~/下, touch创建文件 .git-credentials, 用vim编辑此文件,输入内容格式: touch .git-credentials vim .git-credentia ...

  4. 第十章 泛型程序设计与C++标准模板库 泛型程序设计及STL的结构

  5. sublimetext 2 编译文件带input时 提示 EOFError: EOF when reading a line

    昨天在网下下载了个什么sublimetxt 2 的破解版,然后让我折腾了半天,没错 ,就是因为这个 EOFError: EOF when reading a line错误让我搞的半死.怨自己,贪图中文 ...

  6. 53. Maximum Subarray (Array; DP)

    Find the contiguous subarray within an array (containing at least one number) which has the largest ...

  7. 8-组成n的1的个数

    /*                                             ones时间限制:1000 ms  |  内存限制:65535 KB难度:3 描述    Given a ...

  8. discuz回贴通知插件实现-页面嵌入点(钩子)

    1.如何保证主题被回复时业务代码被执行. 2.获得主题,主题发布者,贴子等信息. 3.discuz发送email邮件.   discuz使用嵌入点(钩子)来处理代码的执行时机. 当用户开启插件开发者模 ...

  9. Nginx 分析access日志文件

    Nginx Access Log日志统计分析常用命令 IP相关统计 统计IP访问量 awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时 ...

  10. 一、消息队列之ActiveMQ的安装、配置和C#样例代码

    最近有时间了,研究一下消息队列ActvieMQ,结合自己的实践和网上的一些大家内容,整理如下,所有步骤和链接均是正确的. 1.ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲 ...