vscode不能直接运行apex代码,需通过salesforce cli部署到组织后远程执行;须确保项目结构合规(sfdx-project.json+force-app路径)、jdk 17/21配置正确、测试类以test结尾且含@istest注解,并用apex replay debugger进行日志回放式调试。

VSCode 本身不能直接“运行” Apex 代码——它不是解释器,也不在本地执行 Apex。你真正能做的,是通过 Salesforce CLI 将 Apex 类部署到组织(org),再触发执行(比如调用 REST API、运行测试、触发流程等)。所谓“运行”,本质是「部署 + 远程执行」。
Apex 类无法保存或部署:检查 sfdx-project.json 和 force-app 结构
VSCode 报错 No source path specified 或保存时无响应,大概率是项目结构没被识别。Salesforce Extension Pack 只在符合 SFDX 规范的目录下才激活 Apex 支持。
-
sfdx-project.json必须存在项目根目录,且packageDirectories字段要明确指向force-app(如"path": "force-app") -
force-app/main/default/classes/是 Apex 类的默认存放路径;把MyClass.cls放错位置(比如直接丢在根目录)会导致 CLI 无视它 - 新建项目别手敲配置,用命令面板:
Cmd+Shift+P→ 输入SFDX: Create Project with Manifest→ 选Standard模板,它会自动生成合规结构
右上角没有 “Run Test” 链接:确认类名、注解与语言模式
编辑器里打开一个 Apex 测试类,但看不到代码透镜(Code Lens)里的 Run Test,常见原因有三个:
- 文件后缀不是
.cls,或 VSCode 当前语言模式没设为Apex(右下角状态栏点击,手动选Apex) - 类名不以
Test结尾(如AccountServiceTest.cls),或方法缺少@isTest注解(@testMethod已弃用,必须用@isTest) -
salesforcedx-vscode-apex.enable-sobject-refresh-on-startup被关了——关掉后 SObject 定义不加载,语言服务器可能降级为只做基础语法检查,连测试识别都失效
点击 Run Test 后卡住或报错:CLI 认证、JDK 和日志级别
点完 Run Test 没反应,终端里出现 ERROR running force:apex:test:run 或提示找不到 Java,说明环境链断在底层。
- 先确认 CLI 登录状态:
sfdx auth:list看目标 org 是否在列表中且DEFAULT ORG标记为Y;没登录就补sfdx auth:web:login -a MyOrg - JDK 版本必须为 17 或 21(JDK 11 已不推荐,JDK 8 完全不可用);在 VSCode 设置里搜
salesforcedx-vscode-apex.java.home,填绝对路径(macOS 示例:/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home) - 如果报日志解析失败(如
Invalid log level),说明当前调试日志级别太低;进 Setup → Debug Logs → 新建 Trace Flag,把Apex Code和Apex Profiling都设为Finest
想单步调试 Apex:必须用 Apex Replay Debugger,不是普通断点
你在 .cls 文件打个红点然后按 F5,不会停住——VSCode 的默认调试器对 Apex 无效。真断点调试只能靠 Apex Replay Debugger,它依赖已捕获的调试日志。
- 先确保扩展包已装全(
Apex Interactive Debugger和Apex Replay Debugger都含在官方 Extension Pack 里) - 运行一次测试并勾选
Enable Apex Debug Log(命令面板搜SFDX: Invoke Apex或在测试类里点Run Test with Coverage) - 日志生成后,在
OUTPUT面板切换到Apex Replay Debugger,选中日志文件,点右上角播放图标——这时才能逐行走、看变量、跳进方法 - 注意:Replay 是回放,不是实时连接 org;每次改代码都要重新跑测试、抓新日志
最常被忽略的是 JDK 路径和日志级别——前者导致整个 Apex 语言服务瘫痪,后者让 Replay Debugger 找不到可解析的数据。这两项配错,其他所有操作都会静默失败。











