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

JDK 16下移除--enable-preview编译参数时出现Ant编译失败的问题求解

嘿,这个问题我之前帮同事排查过,其实是旧编译产物残留和JDK版本特性规则变化搞出来的矛盾,我给你理清楚:

问题根源拆解

先搞明白两个报错的本质:

  1. 用--enable-preview --release 15编译时报错:JDK16的规则是预览特性只能和当前主版本(即16)绑定,你指定--release 15再开启预览,相当于要求JDK16编译15版本的预览特性,这完全违反了它的设计逻辑,所以直接报错。
  2. 去掉参数后报错:这是因为你之前用JDK15编译出来的Foo.class还留在编译目录里!这个类是用JDK15的预览模式生成的,JDK16加载它的时候会识别出「这是个带预览特性的旧版本类」,所以强制要求你加--enable-preview才能加载,但你现在编译新代码根本不需要这个参数,就陷入了矛盾。
解决方案(按顺序来,一步都不能少)
  • 第一步:彻底清理旧编译产物
    运行Ant的clean任务,把所有旧的.class文件、编译输出目录完全清空。别手动删,用Ant任务确保删干净,比如:

    <target name="clean">
        <delete dir="bin"/> <!-- 替换成你的实际编译输出目录 -->
    </target>
    

    这是最关键的一步,残留的旧class文件才是导致第二个报错的元凶。

  • 第二步:调整Ant的javac配置
    既然Records在JDK16已经成为标准特性,编译时完全不需要预览参数了。把javac任务里的--enable-preview和--release 15删掉,换成适配JDK16的配置:

    <target name="compile" depends="clean">
        <javac srcdir="src" destdir="bin" source="16" target="16" fork="true" executable="path/to/jdk16/bin/javac"/>
    </target>
    

    注意要确保executable指向JDK16的javac,避免Ant调用了系统里残留的JDK15工具。

  • 第三步:验证运行环境
    运行程序时也用JDK16的java命令,不需要加任何预览参数——毕竟Records已经是标准特性了,直接运行就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 14:17:39