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

添加特定Maven依赖后Tomcat 9部署失败求助

解决Tomcat JarScanner加载类失败及ArrayIndexOutOfBounds异常问题

看起来你遇到的核心问题是添加JDA等依赖后,Tomcat的JarScanner在扫描WAR包时出现异常,导致类加载失败,甚至抛出ArrayIndexOutOfBounds错误。结合你的描述和Tomcat 9的特性,我整理了几个针对性的解决方案:

1. 精准跳过有问题的JAR文件(而非全部禁用扫描)

你之前尝试的tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\ *.jar语法有问题,而且完全禁用扫描可能导致Tomcat无法加载必要的容器类或Web应用的核心类。正确的做法是只跳过引发问题的特定依赖JAR:

在catalina.properties中修改配置,列出JDA及相关可能有问题的依赖:

tomcat.util.scan.StandardJarScanFilter.jarsToSkip=jda-*.jar,trove4j-*.jar,opus-java-*.jar,jna-*.jar,nv-websocket-client-*.jar

这样既避免了扫描触发异常的JAR,又保留了对其他必要JAR的扫描能力。

2. 调整Context.xml的JarScanner配置为精准过滤

如果全局配置不生效,可以在Web应用的META-INF/context.xml中添加更细粒度的JarScanner过滤规则:

<Context>
    <JarScanner scanClassPath="true">
        <JarScanFilter 
            defaultPluggabilityScan="false" 
            jarsToSkip="jda-*.jar,opus-java-natives-*.jar"
        />
    </JarScanner>
</Context>

这里保留scanClassPath="true"确保必要的类路径扫描,只跳过已知有问题的JDA相关依赖。

3. 排查JDA依赖的嵌套内容与传递依赖

JDA这类Discord开发库通常会引入大量传递依赖,甚至部分依赖可能包含嵌套JAR或格式异常的MANIFEST.MF(比如Class-Path字段有非法字符),这是Tomcat JarScanner崩溃的常见原因:

  • 用Maven命令查看依赖树,排除不必要的传递依赖:
    mvn dependency:tree
    
    比如如果某些依赖是可选的,可以在pom.xml中添加<exclusions>标签排除,减少WAR包中的JAR数量。
  • 解压WAR包查看WEB-INF/lib,检查是否有JAR内部包含其他JAR文件(这类嵌套结构Tomcat扫描时容易出错),如果有,尝试更换为不包含嵌套的依赖版本。

4. 升级Tomcat 9版本

你当前使用的Tomcat 9.0.30是比较早期的版本,后续的Tomcat 9.x版本修复了多个JarScanner相关的Bug(包括ArrayIndexOutOfBounds异常)。建议升级到9.0.65及以上的稳定版本,很多扫描异常会自动解决。

5. 定位具体触发异常的JAR

如果以上方法无效,可以开启Tomcat的Debug日志,查看JarScanner扫描到哪个JAR时抛出异常:
在logging.properties中添加:

org.apache.catalina.util.Scanner.level=FINE

重新部署后,日志会显示扫描的每个JAR,找到触发ArrayIndexOutOfBounds的那个JAR,直接在配置中跳过它即可。

内容的提问来源于stack exchange,提问作者Ethan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:29:10