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

将代码库从JDK8迁移至JDK21时编译遇ZipException问题求助

解决JDK8迁移到JDK21时Ant编译出现的Xalan ZipException

问题核心

迁移到JDK21后,Ant编译时抛出ZipException,提示xalan.jar的entry包含../元素,但实际检查jar内部结构并没有这种路径。错误日志如下:

[javac] C:\source\com\admin\document\AdminDoc.java:1: error: cannot access com.admin.document
[javac] package com.admin.document;
[javac] ^
[javac] ZipException opening "xalan.jar": ZIP file can't be opened as a file system because entry "/../classes/org/apache/xpath/compiler/Compiler.class" has a '.' or '..' element in its name
[javac] 100 errors
[javac] only showing the first 100 errors, of 779 total; use -Xmaxerrs if you would like to see more

根本原因是Ant 1.7.1版本过于老旧,在处理classpath时生成了带../的相对路径,而JDK16及以上版本对ZIP文件系统的路径校验大幅收紧,将这种外部路径误判为jar内部的entry路径,从而触发错误。

解决方案

1. 强制升级Ant版本

Ant 1.7.1是2008年的版本,完全不兼容JDK21。直接升级到Ant 1.10.x系列(推荐1.10.14及以上),新版本修复了classpath处理的兼容性问题,能正确适配JDK16+的路径校验规则。

2. 修正classpath路径配置

检查Ant构建脚本中xalan.jar的引用方式:

  • 尽量使用绝对路径,比如C:\project\lib\xalan.jar
  • 或者基于项目根目录的相对路径,用${basedir}/lib/xalan.jar替代带../的层级跳转路径

3. 移除冗余的Xalan依赖

JDK从1.6开始就内置了Xalan的XML处理实现,若项目没有使用Xalan的特殊功能,可以直接从classpath中移除xalan.jar,避免和JDK自带的XML类库冲突,同时消除该错误源。

4. 验证jar文件完整性

用命令行工具确认xalan.jar内部确实没有违规路径:

jar tf xalan.jar | grep "\.\."

如果输出为空,说明jar本身没问题,问题完全出在构建工具的路径处理上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:13:25