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

Java 1.8 161+版本jjs工具在Windows下类路径含盘符报错问题

关于JDK 1.8.0_171中jjs工具处理带盘符类路径失败的问题解析

问题重现

你在Windows上用JDK 1.8.0_171运行jjs工具时,碰到了一个奇怪的问题:当-cp参数里的类路径带盘符(比如d:),命令直接报错;但把盘符去掉后就能正常运行,而且用JDK 1.8.0_91的时候完全没问题,团队里还有人没遇到这个情况。

出错的命令示例

D:\Java\64\jre1.8.0_171\bin\jjs.exe -cp "d:\dev\gitrepos\lconfig\target\classes;d:\dev\m2repo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.4\jackson-module-parameter-names-2.9.4.jar;d:\dev\m2repo\com\fasterxml\jackson\core\jackson-core\2.9.4\jackson-core-2.9.4.jar;d:\dev\m2repo\com\fasterxml\jackson\core\jackson-databind\2.9.4\jackson-databind-2.9.4.jar;d:\dev\m2repo\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;d:\dev\m2repo\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.4\jackson-datatype-jdk8-2.9.4.jar;d:\dev\m2repo\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.4\jackson-datatype-jsr310-2.9.4.jar;d:\dev\m2repo\com\fasterxml\jackson\module\jackson-module-afterburner\2.9.4\jackson-module-afterburner-2.9.4.jar" -scripting \dev\gitrepos\lconfig/src/test/js/react-renderer/test.js

收到的错误提示

jjs [] [-- ] "Illegal char <:> at index 40: d:\dev\gitrepos\lconfig\target\classes;d:\dev\m2repo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.4\jackson-module-parameter-names-2.9.4.jar;;;d:\dev\m2repo\com\fasterxml\jackson\module\jackson-module-afterburner\2.9.4\jackson-module-afterburner-2.9.4.jar" is not a recognized option. Use "-h" or "-help" to see a list of all supported options.

问题根源

这其实是JDK版本升级带来的参数解析逻辑变更:

  • 在JDK 1.8.0_91及更早版本,jjs(基于Nashorn引擎)的参数解析器能正确识别Windows路径里的冒号(:),知道这是盘符的一部分,不会当成命令选项的分隔符。
  • 从JDK 1.8.0_101开始,Oracle调整了Nashorn的命令行参数校验规则,变得更严格——它会把类路径里的冒号误判成Unix风格的选项分隔符(比如-Dproperty=value里的特殊符号逻辑),所以就抛出了"Illegal char <:>"的错误。
  • 团队里有人没碰到这个问题,要么是他们用的JDK版本低于1.8.0_101,要么是他们的类路径配置里没显式带盘符(比如用相对路径,或者环境变量里的路径已经包含盘符,不需要额外指定)。

可行的临时解决方案

  • 调整类路径格式:把带盘符的路径改成相对路径,或者用/替换\(Windows系统是支持斜杠作为路径分隔符的),同时确保整个-cp参数用双引号包裹好。
  • 预处理Maven的classpath:在Maven执行jjs命令时,对%classpath做一下处理,去掉盘符部分,或者把盘符后的路径转成相对路径。
  • 临时回退JDK版本:如果短期内找不到更好的办法,可以先回退到JDK 1.8.0_91,保证业务能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:11:22