Tomcat 10中JSTL URI解析失败及Maven构建报错求助
解决方案:Maven构建失败与JSTL URI解析错误
一、解决Maven构建失败问题
构建报错的核心原因是maven-war-plugin:2.2版本过于老旧,不兼容Java 17。该版本插件依赖的Plexus组件在Java 9+模块化环境下无法正常访问Properties类的defaults字段。
修复步骤:
- 在
pom.xml的<build><plugins>中更新maven-war-plugin到兼容Java 17的版本,推荐使用3.3.2或更高版本:
<plugin> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin>
- 可选:将maven-compiler-plugin升级到更适配Java 17的3.11.0版本,提升稳定性:
<plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <release>17</release> </configuration> </plugin>
二、解决JSTL URI解析失败问题
Tomcat 10基于Jakarta EE 9,所有Java EE相关API已迁移至jakarta.*包路径,JSTL的URI和依赖配置均需调整:
1. 修正JSP中的taglib URI
将BookList.jsp里的JSTL标签库声明替换为Jakarta版本的URI:
<%@ taglib prefix="c" uri="https://jakarta.ee/xml/ns/jakartaee/jstl/core" %>
2. 调整pom.xml中的JSTL依赖
原依赖缺少JSTL API包,需补充完整的Jakarta JSTL依赖组合(API+实现):
<dependencies> <!-- Jakarta JSTL API,由Tomcat容器提供,无需打包 --> <dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>2.0.0</version> <scope>provided</scope> </dependency> <!-- Jakarta JSTL实现,仅运行时需要 --> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> <scope>runtime</scope> </dependency> <!-- 补充Servlet/JSP API依赖,Tomcat已提供 --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency> </dependencies>
三、完整修正后的pom.xml示例
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>BookStore</groupId> <artifactId>BookStore</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <release>17</release> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>jakarta.servlet.jsp.jstl</groupId> <artifactId>jakarta.servlet.jsp.jstl-api</artifactId> <version>2.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> <scope>runtime</scope> </dependency> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>5.0.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>3.0.0</version> <scope>provided</scope> </dependency> </dependencies> </project>
四、验证步骤
- 执行
mvn clean install,确认构建成功。 - 将生成的war包部署到Tomcat 10,访问对应路径,验证JSTL的
<c:forEach>标签正常渲染列表。
内容的提问来源于stack exchange,提问作者A2S2nbgmr
相关产品推荐
相关产品推荐

