手动执行gradlew compileDebugKotlin时遇java.lang.ClassNotFoundException
gradlew compileDebugKotlin时的ClassNotFoundException问题 我之前也碰到过一模一样的问题!Android Studio里构建顺风顺水,一到命令行跑gradlew compileDebugKotlin就炸这个错,其实根源很明确——命令行环境使用的是JRE(Java Runtime Environment)而不是JDK(Java Development Kit),com.sun.tools.javac.util.Context是JDK专属的类,JRE里没有包含对应的tools.jar,所以才会抛出找不到类的异常。而Android Studio默认会使用它自己配置的JDK,所以IDE内构建完全正常。
下面是我亲测有效的解决步骤:
1. 检查并修正JAVA_HOME环境变量
首先得确认你的系统全局环境变量JAVA_HOME指向的是JDK目录,而不是JRE:
- Windows系统:打开命令提示符,输入:
echo %JAVA_HOME% - Linux/macOS系统:打开终端,输入:
echo $JAVA_HOME
输出应该是类似C:\Program Files\Java\jdk1.8.0_301或者/Library/Java/JavaVirtualMachines/jdk11.jdk/Contents/Home这样的JDK路径,绝对不能是带jre的路径。如果不对,修改环境变量指向正确的JDK,然后重启命令行窗口让配置生效。
2. 给项目单独指定Gradle使用的JDK
如果你不想修改全局环境变量,或者全局配置没问题但还是报错,可以在项目根目录的gradle.properties文件里添加一行配置,强制Gradle使用指定的JDK:
org.gradle.java.home=/path/to/your/jdk
把/path/to/your/jdk替换成你实际的JDK路径,比如Windows上要写成C:\\Program Files\\Java\\jdk11(注意反斜杠要转义)。
3. 同步Android Studio的JDK配置
有时候命令行的Gradle没同步IDE的配置,也会出问题:
- 打开Android Studio,进入
File > Project Structure > SDK Location,查看JDK location的路径,确保这是一个完整的JDK(不是JRE)。 - 然后在命令行里先跑
gradlew clean清理缓存,再重新执行gradlew compileDebugKotlin试试。
4. 验证JDK版本兼容性
还要注意JDK版本和项目依赖的兼容性:比如如果你的项目用了Kotlin 1.8+或者Gradle 7+,建议使用JDK 11及以上版本,旧版JDK可能会出现类加载不兼容的问题。
如果以上方法都没用,可以试试删除项目根目录下的.gradle文件夹,让Gradle完全重新初始化构建环境,再重新运行命令。
内容的提问来源于stack exchange,提问作者ardevd




