编译Dafny源码遇Unsupported class file major version 63错误求助
Unsupported class file major version 63错误 这个错误核心是Java类文件版本与运行时JVM版本不兼容,major version 63对应Java 19,说明有代码用Java 19编译,但构建过程中某个环节调用了更低版本的JVM加载类文件。结合你的环境配置,可能的原因和解决方法如下:
Gradle编译配置版本不匹配
检查项目根目录的gradle.properties或build.gradle文件,确认sourceCompatibility和targetCompatibility是否设置为19。如果这两个参数是更低版本(比如11、17),Gradle会强制用低版本标准编译代码,但你的系统JDK是19,生成的类文件版本会超出低版本JVM的兼容范围,触发错误。修改这两个参数为19后重新执行make exe。系统多版本Java冲突
在终端执行java -version和javac -version,确认输出是否都是19.0.2。如果不一致,说明系统PATH里优先级更高的是其他低版本Java,导致Gradle或make调用了错误的JVM。调整系统PATH,将Java 19的bin目录移到最前面,确保全局调用的都是目标版本。Dafny构建脚本硬编码Java路径
查看项目的Makefile内容,检查是否有指定Java执行路径的变量(比如JAVA_HOME或JAVAC)。如果这些变量指向了低版本Java的安装目录,直接修改为Java 19的路径即可。另外,Dafny依赖的ANTLR等工具可能存在版本兼容问题,确认Gradle依赖中的ANTLR版本是否支持Java 19,必要时升级依赖版本。Gradle缓存残留导致冲突
之前用其他Java版本构建产生的缓存文件会干扰新构建。执行./gradlew clean清除构建缓存,同时删除项目目录下的.gradle文件夹,强制Gradle重新下载依赖并以当前Java版本重新构建,之后再运行make exe。
内容的提问来源于stack exchange,提问作者Stack Overflow User

