sublime text 本身不带 java 编译器或运行时,所有功能依赖系统已安装的 javac 和 java 命令;必须先在终端成功执行 javac -version 和 java -version,否则 sublime 构建必失败。

Sublime Text 本身不带 Java 编译器或运行时,所有功能都依赖你系统里装好的 javac 和 java 命令能否被正确调用——终端里 javac -version 和 java -version 都跑不通,Sublime 就不可能成功。
终端能跑 javac 和 java 吗?这是唯一前提
别急着写配置。Sublime 不读 JAVA_HOME,也不加载 ~/.zshrc 或 Windows 用户变量,它只继承启动时的系统默认环境变量。
- macOS/Linux:打开终端,执行
which javac和javac -version,必须有输出且版本一致 - Windows:在 CMD 中运行
where javac和javac -version;若失败,检查系统环境变量Path是否包含%JAVA_HOME%\bin,且JAVA_HOME指向 JDK 根目录(如C:\Program Files\Java\jdk-17.0.2),不是 JRE - 改完环境变量后,必须彻底退出 Sublime 进程(macOS 右键 Dock 图标 → “退出”,Windows 任务管理器杀
subl.exe),再重开,否则新变量不会生效
shell_cmd 里必须加 -encoding UTF-8 和 -d .
缺这两个参数,中文注释会报“非法字符”,带 package 的类一定运行失败。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
-encoding UTF-8强制javac以 UTF-8 读源码;Windows 默认用 GBK,一遇中文就炸 -
-d .让javac按package com.example;自动创建./com/example/目录结构并输出.class;不加它,java根本找不到类 - 别用
-d "${file_path}":它把.class塞进源文件同级目录,破坏包结构;-d .+"working_dir": "$file_path"才对齐
为什么总报 Could not find or load main class?
这不是代码错,是 java 命令没找对类名或工作目录不对。关键点:类名 ≠ 文件名,路径必须匹配 package 结构。
- 一旦写了
package com.example;,文件就必须放在com/example/Hello.java,且working_dir得设为com的上一级(即包含com/的那个目录) -
shell_cmd中运行部分不能写java "$file_base_name",得写java "com.example.Hello" - 如果类没声明
package,可以用java "$file_base_name";但只要加了package,这个变量就失效
要不要用插件?简单场景可以,复杂项目别指望
通过 Package Control 安装 JavaC(作者 r-stein),适合无 package、无跨文件引用的小练习。
- 安装后按
Ctrl+B即可编译并自动运行 - 它不支持
-cp或外部 jar,遇到cannot find symbol基本就是引用了其他类但插件没处理 - 一旦用了
package,就必须把文件放在对应子目录下(如com/example/Hello.java),否则报error: class Hello is public, should be declared in a file named Hello.java
最易被忽略的是:Sublime 启动方式决定它能不能看见你的 PATH;而 -d . 和 working_dir 的配合,决定了 java 能不能从正确的根目录开始按包名找类——这两处错一个,就卡在“编译成功但运行失败”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










