问题背景
环境参数:
学习 maven 依赖范畴, 跟着视频演示没有设置 servlet-api
的依赖范畴为 provided
时, 拜访服务器报错。
报错信息
报错内容: 报错信息: HTTP Status 500 – Class.xxx.xxx.xxx. is not a Servlet [视频演示]
报错截图:
问题剖析
独自增加 servlet-api.jar
起因:
在案例中, 增加了 tomcat7 插件 plugin, 提供了 tomcat 容器环境,tomcat 中提供 servlet-api.jar
, 然而只有当运行 tomcat 时才会应用到这个 servlet, 所以防止在编译阶段因为没有 servlet 而报错, 须要独自提供一个 servlet 依赖。
设置独自的 servlet 依赖的 <scope>
为provided
起因:
如果不设置为 provided
, 则 运行打包阶段 独自的 servlet 会和 tomcat 容器中的 servlet 打包在同一个文件夹中造成抵触而报错。独自的 servlet 仅心愿在 编译阶段 中无效, 而运行打包阶段不须要将这个 servlet 打包。
问题解决
个别状况下, 独自增加的 servlet-api
依赖坐标须要增加 <scope> 为provided
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
maven 依赖范畴表格
依赖范畴 | 对编译阶段无效 | 对测试阶段无效 | 对运行时无效 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | spring-core |
test | Y | Junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | Y | JDBC 驱动 | |
system | Y | Y | 本地 Maven 参控股之外的类库【不须要理解】 |
相干参考
【视频】依赖范畴详解: https://www.bilibili.com/vide…