`

由一个异常引发的scope总结

 
阅读更多

一、背景 

     web项目pom.xml都配置好之后,其中关于servlet的配置如下:

     

  <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

    结果在启动的时候报如下异常:

    

spring-analysis\target\spring-analysis-1.0\WEB-INF\lib\servlet-api-2.5.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
2014-9-6 12:03:27 org.apache.catalina.core.StandardContext start
严重: Error listenerStart

 

     在网上查到的原因是,tomcat本身自带的servlet-api-2.5.jar与引入的servlet-api-2.5.jar包冲突了

   解决办法如下,将配置改为:

   

  <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
            <scope>compile</scope>
        </dependency>

 

    以往比较少注意到scope标签的用处,借此机会总结下。

 

二、scope的解释以及用法

   以下内容来源于博客  http://drizzlewalk.blog.51cto.com/2203401/665590

  依赖范围控制哪些依赖在哪些classpath 中可用,哪些依赖包含在一个应用中。让我们详细看一下每一种范围:

compile (编译范围)

compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath 中可用,同时它们也会被打包。

 

provided (已提供范围)

provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用。例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个Servlet API JAR 由你的应用服务器或者servlet 容器提供。已提供范围的依赖在编译classpath (不是运行时)可用。它们不是传递性的,也不会被打包。

 

runtime (运行时范围)

runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC

驱动实现。

test (测试范围)

test范围依赖 在一般的编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。

 

system (系统范围)

system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven 也不会在仓库中去寻找它。如果你将一个依赖范围设置成系统范围,你必须同时提供一个 systemPath 元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的 Maven 仓库中引用依赖)。

 

 

 

 

 

分享到:
评论

相关推荐

    AngularJS 多指令Scope问题的解决

    1. **使用孤立Scope**:为了避免多个指令实例共享同一个Scope,可以设置`scope: true`或`scope: {}`,这将为每个指令实例创建一个独立的、不继承父Scope的新Scope。然而,这并不是最佳解决方案,因为它可能导致数据...

    axis2常见异常总结

    Axis2 是一个流行的WebService框架,它提供了许多功能强大且灵活的特性。然而,在实际使用中,我们经常会遇到各种异常问题。下面我们将总结 Axis2 中的一些常见异常问题及其解决方法。 1. Jar 包或文件夹下的类成员...

    simulink仿真的scope图形编辑

    Scope图形是Simulink仿真中的一种常见图形,用于显示信号波形和其他数值信息。在Simulink仿真中,默认的Scope图形是黑底的,不方便编辑和打印。在这里,我们将教大家如何得到美观不失真的Scope图形。 首先,我们...

    Ruby on Rails: the scope method

    在Ruby on Rails框架中,`scope`方法是一个非常强大的工具,用于定义数据库查询的预设条件,从而简化代码并提高可读性和可维护性。下面将详细介绍`scope`方法的基本概念、用法以及如何在Rails应用中充分利用它。 ##...

    Getting Started with NI-SCOPE

    每个routine对应一个programmatic操作,例如配置、读取、写入和触发仪器。Instrument Driver可以简化仪器控制,减少测试程序开发时间,无需学习每个仪器的编程协议。 二、Instrument Driver的结构 所有Instrument ...

    Scope开发介绍

    一个Scope可以调用另一个Scope,并能从任何数据源聚合数据,包括其他的Scope。Scope工具箱(registry)负责启动Scope运行器,并在永久需求时由注册表启动。此外,它还会管理Scope运行器的启动和退出,并监控安装文件...

    将simulink的Scope波形数据保存到workspace.doc

    下面以一个例子分别介绍三种变量类型的画图方法: 1. 输出类型为向量形式。从图上看到,输出了两维时间序列,而实际输出到工作空间的变量 ScopeData 为三维序列,其中第一列为时间,这正好为我们画图提供了方便。...

    Maven中scope详细说明

    Maven 中的 Scope 是一种依赖范围控制机制,用于控制哪些依赖在哪些 classpath 中可用,哪些依赖包含在一个应用中。在 Maven 中,Scope 主要分为五种:compile、provided、runtime、test 和 system。 compile...

    J-Scope6.11安装包

    J-Scope 6.11 版本的发布针对之前版本存在的一个关键问题进行了修复,即在选择芯片时可能导致程序闪退的问题,这无疑提高了用户的使用体验和工作效率。 在之前的版本中,用户在尝试连接不同类型的微处理器或微控制...

    j-scope安装包,版本为6,1

    它允许用户在程序执行过程中捕获和分析数据,提供了一个强大的硬件调试环境。对于ST32系列微控制器,J-Scope支持其内置的调试接口,如JTAG和SWD,这些接口是进行在线编程和调试的基础。 "Setup_JScope_V611m.exe"是...

    Scope一个漂亮的VC++示波器生成类附源码实例

    标题中的"Scope一个漂亮的VC++示波器生成类附源码实例"指的是使用Microsoft的C++编程环境Visual Studio(通常简称为VC++)创建的一个示波器类库,该类库设计得美观且功能强大。示波器在电子工程和计算机科学中用于...

    前端开源库-style-scope

    "style-scope"是一个专为前端开发者设计的开源库,它的主要功能是实现本地范围样式的管理,以提高代码的可维护性和复用性。在本文中,我们将深入探讨style-scope库的核心特性、工作原理以及它如何与PostCSS和...

    Spring之scope讲解测试示例代码

    在Spring框架中,`scope`是一个非常重要的概念,它决定了Bean的生命周期和实例化策略。在Spring中,Bean的scope主要有以下几种: 1. **singleton(单例)**:这是默认的scope,每个容器中只有一个实例。无论多少次...

    Angular.Js之Scope作用域的学习教程

    在 HTML 代码中,一旦一个 ng-app 指令被定义,那么一个作用域就产生了,由 ng-app 所生成的作用域比较特殊,它是一个根作用域($rootScope),它是其他所有$Scope 的最顶层。 除了用 ng-app 指令可以产生一个作用域...

    visual_scope破解版

    visual_scope破解版,用于串口调试在上位机显示波形,非常好用的调试工具

    visualscope破解版,可以任意COM口

    免费破解版visualscope 安全无毒

    Dagger2中Scope使用Demo

    在Dagger2中,`@Scope`注解是至关重要的一个概念,它用于定义依赖的作用域,帮助我们控制对象的生命周期,防止不必要的对象实例化,从而优化性能。 在Android应用中,不同的组件(如Activity、Fragment或Service)...

    Serial_Digital_Scope V2

    在"Serial_Digital_Scope V2"中,硬件部分通常是一个微控制器或者专用的信号采集芯片,它将接收到的模拟电信号转换为数字信号,并通过串行接口发送到计算机。软件部分则负责接收这些数据,进行实时处理,包括采样、...

    通过angularjs的ng-repeat指令看scope的继承关系

    2. **创建子Scope**:对于数组中的每个元素,`ng-repeat`都会创建一个新的Scope,该Scope继承自其父Scope。这意味着新Scope可以访问父Scope的所有属性,同时拥有自己的独立作用域。 3. **数据隔离**:虽然子Scope...

Global site tag (gtag.js) - Google Analytics