必须先确保终端中javac -version和java -version均能正常输出版本号,sublime才能调用系统jdk成功;否则所有构建配置均无效,因sublime不自带java编译器,仅依赖已安装的jdk命令。

javac 和 java 命令在终端能正常运行,Sublime 才可能调用成功;否则所有构建配置都是空谈。
先确认系统级 JDK 是否真就绪
Sublime 不自己带 Java 编译器,它只调用你系统里已装好的 javac 和 java。别跳过这步直接改配置文件。
打开终端(macOS/Linux)或命令提示符/PowerShell(Windows),执行:
javac -versionjava -version
必须都输出版本号(如 javac 17.0.1),才算真正可用。
- 如果
java -version成功但javac -version报错,说明你只装了 JRE,不是 JDK —— 得重装完整 JDK(推荐 Eclipse Temurin 或 Oracle JDK) - Windows 用户:检查
JAVA_HOME是否指向 JDK 根目录(如C:Program FilesJavajdk-17.0.1),且%JAVA_HOME%in已加入Path - macOS/Linux 用户:执行
echo $PATH | grep java确认$JAVA_HOME/bin在路径中;若用 zsh,Sublime 可能只读~/.bash_profile,需在里面source ~/.zshrc - 改完环境变量后,必须彻底退出 Sublime(不是关窗口,是杀进程)再重开,否则它不会读新变量
Build System 怎么写才不报 “cannot find symbol”
默认的 JavaC.sublime-build 只编译单文件,遇到 package 或引用其他类就崩。核心是让 javac 知道类路径和输出结构。
- 用
-d .参数,而不是只写$file:例如["javac", "-encoding", "UTF-8", "-d", ".", "$file"] -
-d .的作用是按package com.example;自动创建./com/example/目录并把.class放进去 - 不加
-d .就算源码有package,javac也会把.class扔进当前目录,后续java根本找不到类 - 中文源码必须加
-encoding UTF-8,否则javac默认用系统编码(Windows 是 GBK)读文件,会报“非法字符” -
working_dir设为"$file_path",不能是固定路径,否则import其他类或读取同目录资源会失败
运行时为什么总报 “Could not find or load main class”
这不是代码错,是 java 命令没找对类名或工作目录不对。
-
java后面必须跟类名,不是文件名;若类是public,类名必须与文件名一致 - 确保
working_dir是"$file_path",否则.class文件不在当前目录,java找不到 - 有
package时,不能用java -cp . $file_base_name;必须配合-d .编译,再用java $file_base_name(此时 JVM 会按包名自动定位到./com/example/Main.class) - Windows 下路径含空格时,
shell_cmd中的命令要用引号包裹,或改用cmd /c封装避免解析失败
多个 JDK 版本共存时怎么切换
Sublime 不识别 java -version 的软链或 update-alternatives,它只认你配置里写的路径或环境变量。
- 不要依赖系统 PATH 自动继承;显式写死
javac和java的绝对路径(如 macOS 上是/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home/bin/javac) - 用终端执行
which javac(macOS/Linux)或Get-Command javac(PowerShell)查真实路径 - 为不同 JDK 版本建多个
.sublime-build文件,比如Java11.sublime-build、Java17.sublime-build,分别指定对应 bin 路径 - Windows 路径中反斜杠要双写(
C:\Program Files\Java\jdk-17.0.1\bin\javac),或统一用正斜杠(Sublime 支持)
package 声明,Sublime 不提示也不校验,但 javac 直接失败——这是最容易被忽略、又最难排查的一环。Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











