You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Gradle配置让Gretty支持web.xml 2.3 DTD解析?

解决Gretty插件解析DTD格式web.xml的DOCTYPE禁用错误

我刚好碰到过一模一样的老项目场景——维护一个运行超10年的Web应用,基于旧版Servlets/JSP,web.xml用的是Servlet 2.3的DTD声明:

<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'>

因为所用的Tomcat/Jetty容器不支持对应版本的XSD格式,没法把web.xml改成XSD规范,结果用Gretty插件构建时直接报了这个致命错误:

Configure project :MyApp:WebApp
[Fatal Error] web.xml:2:10: DOCTYPE is disallowed when the feature "http://apache.org/xml/features/disallow-doctype-decl" set to true.

问题根源很明确:Xerces SAX解析器默认启用了禁用DOCTYPE声明的特性,我们只需要通过Gradle配置强制把这个属性设为false就能解决。

具体解决方案

你可以在项目的build.gradle里添加以下配置,两种方式选其一即可:

方式1:全局设置系统属性(适用于所有Gradle任务)

在脚本最顶部添加一行,直接设置JVM系统属性,让解析器允许处理DTD声明:

System.setProperty("apache.xml.parser.disallow-doctype-decl", "false")

方式2:仅针对Gretty任务配置(更精准)

如果不想影响其他任务,只给Gretty的运行和构建相关任务指定参数:

gretty {
    // 给Gretty运行时的JVM添加属性
    jvmArgs "-Dapache.xml.parser.disallow-doctype-decl=false"
    
    // 如果构建阶段(比如web.xml校验环节)也报错,补充配置构建任务的系统属性
    buildConfig {
        systemProperty "apache.xml.parser.disallow-doctype-decl", "false"
    }
}

配置完成后重新运行Gretty的构建或启动任务,解析器就会正常处理DTD格式的web.xml,那个致命错误就会消失了。

内容的提问来源于stack exchange,提问作者Marek-A-

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:57:11