Mac OS下如何在Sublime Text 3中配置构建系统终端运行Java程序
在Mac上配置Sublime Text 3的Java构建系统,让程序在Terminal中运行
你的问题出在原来的构建系统里:javac和java命令是在Sublime自带的shell环境中执行的,后面的open -a Terminal.app只是单纯打开一个空终端窗口,并没有把运行命令传递给它,所以程序输出还是留在Sublime控制台里。
要让Java程序在Spotlight唤起的bash终端中运行,我们需要把编译和运行的命令交给Terminal去执行,而不是在Sublime的shell里跑。这里给你两种可行的构建系统配置方案:
方案一:用AppleScript控制Terminal执行命令
这个方案通过osascript调用AppleScript,让Terminal自动切换到Java文件所在目录,完成编译和运行:
{ "cmd": ["osascript", "-e", "tell application \"Terminal\" to do script \"cd '${file_path}' && javac '${file_name}' && java '${file_base_name}'\""], "file_regex": "^(...*?):([0-9]*):?([0-9]*)", "selector": "source.java", "shell": false }
配置说明:
osascript -e:执行后面的AppleScript代码tell application "Terminal" to do script:告诉Terminal执行引号内的命令cd '${file_path}':先切换到当前Java文件的目录,避免路径问题javac '${file_name}' && java '${file_base_name}':编译并运行程序
方案二:用Terminal的启动参数直接执行命令(带窗口停留)
如果你希望程序运行完后终端窗口不会自动关闭,可以用这个方案,添加了read命令让窗口等待你按回车再关闭:
{ "cmd": ["open", "-a", "Terminal.app", "--args", "-c", "cd '${file_path}' && javac '${file_name}' && java '${file_base_name}; read -p \"Press Enter to exit...\"'"], "file_regex": "^(...*?):([0-9]*):?([0-9]*)", "selector": "source.java", "shell": false }
配置说明:
open -a Terminal.app --args -c:打开Terminal并传递-c参数(让Terminal执行后面的命令)read -p "Press Enter to exit...":运行完程序后等待用户输入,防止窗口自动关闭
怎么设置这个构建系统?
- 打开Sublime Text 3,点击顶部菜单栏的
Tools->Build System->New Build System... - 清空默认内容,粘贴上面任意一种方案的代码
- 保存文件,命名为
JavaTerminal.sublime-build(名字自定义,后缀必须是.sublime-build) - 回到Sublime,在
Tools->Build System里选择你刚保存的JavaTerminal - 打开你的Java文件,按下
Cmd+B,就能看到Terminal自动弹出并运行你的程序了
额外注意:
- 如果你的Terminal默认shell不是bash(比如现在Mac默认是zsh),这些命令也能正常工作,因为编译运行Java的命令是通用的
- 编译错误信息还是会显示在Sublime的控制台里,方便你调试;运行后的输出则会在Terminal窗口中展示
内容的提问来源于stack exchange,提问作者fawrgoring
相关产品推荐
相关产品推荐

