java - 为什么 Spring-web 没有在其 POM 中添加 javax.javaee-api?
问题描述
在学习Spring框架的时候,发现了一个奇怪的编译错误:
“找不到类:javax.servlet.ServletException”。
搜索代码后,我在org.springframework.web.WebApplicationInitializer
类中找到了一些代码,它使用javax.servlet.ServletException
:
package org.springframework.web;
import javax.servlet.ServletContext; //here
import javax.servlet.ServletException;//and here
public interface WebApplicationInitializer {
void onStartup(ServletContext var1) throws ServletException;
}
但是,在其 POM 文件中,没有定义依赖项:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.1.RELEASE</version>
<name>Spring Web</name>
<description>Spring Web</description>
<url>https://github.com/spring-projects/spring-framework</url>
<organization>
<name>Spring IO</name>
<url>https://spring.io/projects/spring-framework</url>
</organization>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<id>jhoeller</id>
<name>Juergen Hoeller</name>
<email>jhoeller@pivotal.io</email>
</developer>
</developers>
<scm>
<connection>scm:git:git://github.com/spring-projects/spring-framework</connection>
<developerConnection>scm:git:git://github.com/spring-projects/spring-framework</developerConnection>
<url>https://github.com/spring-projects/spring-framework</url>
</scm>
<issueManagement>
<system>GitHub</system>
<url>https://github.com/spring-projects/spring-framework/issues</url>
</issueManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.1.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.1.RELEASE</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
我认为每个库都应该在其 POM 文件中写入其依赖项,以便 Maven 可以识别并自动下载依赖库。为什么 Spring-web 省略了依赖?
解决方案
为什么 Spring-web 省略了依赖?
不知道具体为什么。您必须向开发人员询问完整的推理...
如果您将 spring-web 5.0.0 POM 文件与最新的 4.xx POM 文件进行比较,您会发现对依赖项进行了重大清理。删除了很多杂乱无章的内容,包括对 servlet api JAR 的任何依赖。
如果您查看 spring-webmvc 5.0.0 的依赖项(此处显示)并向下滚动到提供的依赖项,您将看到对“javax.servlet » javax.servlet-api » 4.0.0”的依赖项。将其与 spring-web 5.0.0 进行对比(如图所示)。
请注意,spring-web(即您使用的依赖项)本身不需要对 servlet-api 的依赖项,否则它不会构建。
所以这让我认为,也许你的项目需要依赖 spring-webmvc 而不是 spring-web ......如果你想获得一个传递的 servlet-api 依赖。
(您是在阅读教科书还是在学习旧版 Spring 的教程或视频?如果是,我建议您在学习时更新教科书或使用旧版 Spring 版本。)
回到你的问题:
为什么 Spring-web 没有在其 POM 中添加 javax.javaee-api?
一个原因是:因为它不需要它!
推荐阅读
- sapui5 - SAPUI5:sap.f.card 为基数为 0..1 的聚合定义的多个聚合的问题
- java - 打开/更新部署包中的 Java 程序项目
- python - 使用未命名的列操作 pandas 数据框并使用这些列的值转换为行
- elasticsearch - 弹性搜索 - 无法在单个文档字段中索引大文件内容
- java - 我有一个while循环,我想多次调用该变量是否可能?
- python-3.x - Django 多租户单一登录。登录后应该重定向到子域
- excel - 无法在 Windows 机器上的 Visual Studio Code 中使用 Excelize
- javascript - 如何动态获取数据并将其显示到弹出模式
- join - Postgres 在同一个查询中选择和更新
- linux - 无法为 linux 内核映像做 objdump