Ant任务javac2是否适配OpenJDK 16?类找不到报错如何解决
问题根因确认
该报错确实与OpenJDK 16和当前版本javac2的兼容性相关。你使用的IntelliJ IDEA 2021.2(版本号212.4746.92)内置的javac2 Ant任务默认适配JDK 8~15,OpenJDK 16新增的模块系统强封装限制、javac内部API变更,会导致javac2执行Forms插桩时无法正常读取依赖jar中的类,即使forms_rt.jar已存在于项目依赖中,也会抛出类不存在的错误。
排查与解决步骤
- 先做兼容性验证:临时将Ant任务的运行JDK切换为JDK 15重新执行构建,若报错消失即可确认是版本兼容问题。
- 方案1:升级IntelliJ IDEA至2021.3及以上版本(版本号213开头),该版本官方已修复javac2对JDK 16+的支持问题,升级后重新生成Ant构建脚本即可正常运行。
- 方案2:若暂时无法升级IDEA,在Ant运行的JVM参数中添加模块开放参数解除强封装限制:
打开IDEA的Ant构建配置,在「运行时JVM选项」中加入以下参数:--add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED - 方案3:检查Ant构建脚本中javac2的任务定义配置,确保
forms_rt.jar被加入javac2任务本身的类路径,而非仅加入项目编译类路径,javac2插桩时会使用独立的类加载器加载依赖,示例配置如下:<taskdef name="javac2" classname="com.intellij.ant.Javac2"> <classpath> <pathelement location="${idea.home}/lib/javac2.jar"/> <pathelement location="${lib.path}/forms_rt.jar"/> </classpath> </taskdef> - 方案4:关闭运行时插桩逻辑,将UI设计器的生成逻辑改为直接写入Java源码:打开Settings > Editor > GUI Designer,将「Generate UI into」选项设置为
Java source code,重新编译后即可无需javac2在构建阶段执行插桩,从根源避免该错误。
内容的提问来源于stack exchange,提问作者Mike Bikoulis
相关产品推荐
相关产品推荐

