能否对.war格式文件执行Jdeps?执行时抛出异常该如何处理
关于在.war归档文件上运行Jdeps工具的问题解答
Jdeps原生支持直接扫描.war格式的归档文件,你遇到的报错并非是Jdeps不支持war包导致的。
报错原因
你遇到的ConstantPool$InvalidIndex: invalid index错误属于字节码解析失败问题,常见触发原因包括:
- 你使用的Jdeps对应的JDK版本,低于war包内class文件编译时使用的JDK版本,低版本Jdeps无法识别高版本JDK新增的字节码结构
- war包内存在损坏的class文件、被加密混淆过的非常规class文件,或是后缀为.class的非字节码资源文件
- war包打包过程中出现损坏,导致包内文件校验不通过
解决方案
- 优先匹配版本:使用不低于class编译版本的JDK自带Jdeps工具执行扫描,比如class用JDK17编译就用JDK17及以上版本的Jdeps
- 常规扫描命令:直接执行
jdeps [可选参数] 目标应用.war即可,常用可选参数包括-R递归扫描所有依赖、--ignore-missing-deps忽略缺失的依赖项避免扫描中断 - 如果直接扫描war仍然报错,可以先将war解压,单独扫描有效class路径:
- 执行
unzip 目标应用.war -d app_temp解压war到临时目录 - 执行
jdeps -R --ignore-missing-deps app_temp/WEB-INF/classes app_temp/WEB-INF/lib/*.jar扫描业务代码和依赖包
- 执行
内容的提问来源于stack exchange,提问作者Silta
相关产品推荐
相关产品推荐

