sublime运行java需终端中javac和java命令可用且版本一致,sublime仅继承启动时系统path;构建系统必须含-d .和working_dir="$file_path",中文源码需指定-encoding utf-8。

javac 和 java 命令在终端能直接运行,Sublime 才可能编译运行 Java;否则所有构建配置都是摆设。
先确认终端里 javac 和 java 真的可用
这不是可选步骤,是硬门槛。Sublime 不自带 JDK,也不读 IDE 级配置,只继承启动时的操作系统 PATH。
- Windows:打开 CMD,执行
where javac和javac -version,两个都必须有输出,且版本号一致(比如都是 17.0.1) - macOS/Linux:在 Terminal 执行
which javac和java -version,路径必须指向你装的 JDK 的bin/目录(比如/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/javac),不能是系统自带的旧版或 JRE - 如果
java -version成功但javac -version报错,说明你只装了 JRE —— 得卸掉,重装完整 JDK(推荐 Eclipse Temurin) - 改完环境变量后,必须彻底退出 Sublime 进程(macOS 右键 Dock 图标 → “退出”,Windows 在任务管理器杀掉
subl.exe),再重开,否则新 PATH 不生效
Java.sublime-build 必须带 -d . 和 working_dir
默认的 Java 构建系统只处理单文件,一写 package 就崩。核心是让 javac 按包名生成目录结构,并让 java 能按包路径定位类。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 编译命令里必须含
-d .:例如["javac", "-encoding", "UTF-8", "-d", ".", "$file"]。不加这个,package com.example;的类会被编译成Main.class扔进当前目录,后续java Main根本找不到它 -
working_dir必须设为"$file_path",不能是固定路径。否则import其他类、读取同目录资源文件、甚至刚生成的.class都会失败 - 中文源码必须加
-encoding UTF-8,否则 Windows 下默认用 GBK 解析,报“非法字符” - Windows 用户注意路径分隔符:JDK 路径中反斜杠要双写(
C:\Program Files\Java\jdk-17.0.1),或统一用正斜杠(Sublime 支持)
别信图形界面启动的 Sublime 能自动读 ~/.zshrc
macOS 上双击图标启动的 Sublime,默认不加载 shell 配置文件里的 $PATH,这是最隐蔽的坑。
- 临时解法:在 Terminal 里执行
open -a "Sublime Text"启动,它会继承当前终端环境 - 长期解法:先配好
subl命令(ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl),然后一律用subl .打开项目 - Windows 用户别只在“用户变量”里加
%JAVA_HOME%in,务必加到“系统变量”的Path中,否则 Sublime(尤其开始菜单启动)可能拿不到
用插件还是手写构建系统?看你的代码有没有 package
如果你只是刷算法题、写小工具,没 package、没跨文件引用,JavaC 插件够用;一旦涉及包结构、多类协作、外部依赖,就得自己写 .sublime-build。
- 装
JavaC(作者 r-stein):Package Control → Install Package → 搜JavaC,别选已停更的SublimeJava - 它默认把
.class输出到源文件同目录,所以package com.example;的文件必须放在com/example/Main.java,否则报class Main is public, should be declared in a file named Main.java - 它不支持
-cp或 jar 包,遇到cannot find symbol基本就是引用了其他类但插件没处理 - 真正可控的方式,还是手动建
Java.sublime-build,显式控制javac -d .、java $file_base_name、工作目录和编码
PATH,决定了它能不能看到你的 javac;而 -d . 和 $file_path 的组合,决定了它编译出的类能不能被 JVM 正确加载。这两处漏掉任一,都会卡在“找不到类”或“命令未找到”。Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










