Sublime Text 编译 运行 Java 源代码 包 类文件
Sublime Text 编译 Java 包
更新记录
2022/05/23 解决SublimeText控制台用户输入问题
前言
目前还存在很多问题,不过暂时能用,就先不折腾了,等日后遇到什么问题再进行修改,同时我也会同步更新博文
目前存在问题:
- 没有对 不存在
main方法的类进行特别处理,在不存在main方法的类中使用Ctrl + b进行编译会报错,报错原因只是不能执行没有main方法的类而以,实际上是已经编译通过的 (其实在运行代码前进行一次if判断配合egrep使用正则表达式匹配是否有main方法 就能解决,但是这个问题对我目前来说不是要紧的所以没有进行处理) - 每次编译都会将整个项目进行重新编译,原来编译完成的类文件会被删除
- 要求项目结构与
intellij idea一样,将源代码储存至src - 如果
package声明的包位置与当前原代码的实际位置不一致依旧会报错,编译是可以通过的,只是不能在sublime text中运行(因为我运行代码的策略采用的是获取当前源代码的路径,使用表达式提取出包的位置后直接运行,这个没处理是因为为个人觉得,既然这个类不属于这个包,为何要将这个类的源代码写在这个包里,等以后遇上必须使用这种写法的时候我再处理吧) 控制台无法接收任何用户输入。(这个问题与脚本无关)已解决- 其他问题欢迎补充,也欢迎对脚本进行完善。个人并没有专门学习
shell脚本,都是边研究边写的。代码比较烂,欢迎大佬帮忙修正。
以下脚本仅适合 Linux 使用,其他系统可以参考实现思路,自行编写脚本
实现思路:
- 编写
shell脚本对Java源代码进行编译 编译完成后运行 当前代码shell脚本需要外界传递 当前源文件的绝对路径 和 当前打开的项目的绝对路径- 获取要编译的源文件的绝对路径
- 从这个绝对路径中提取出 项目名称 项目路径
- 使用
find 源代码路径 -name "*.java" > source.list获取这个项目中所有源文件的路径,并重定向到source.list文件中 - 如果输出路径上存在这个项目的类文件则将类文件删除
- 使用
javac -d $PROJECT_PATH$OUT_NAME$PROJECT_FILE_NAME @source.list对整个项目进行编译 - 提取出输出路径中存放类文件的绝对路径
- 从源文件的绝对路径中提取出 包到源文件的路径并去掉后面的
.java - 使用
java -cp 提取出来的类文件路径 提取出来的包到源文件的路径运行这份代码
SublimeText使用Ctrl + b执行编译的时候调用这个脚本
Shell脚本代码
#!/bin/bash
SRC_NAME="src/"
OUT_NAME="out/production/"
# 获取源文件的绝对路径
FILE_PATH=$1
# 项目名称
PROJECT_FILE_NAME=${2##*/}
# 当前项目的绝对路径地址
PROJECT_PATH=${FILE_PATH%src/*}
# 寻找该项目下的.java文件
find $PROJECT_PATH$SRC_NAME -name "*.java" > source.list
# 如果编译过删除后再编译
if [ -e $PROJECT_PATH$OUT_NAME ];then
rm -r $PROJECT_PATH$OUT_NAME
fi
echo $PROJECT_PATH$OUT_NAME
mkdir -p $PROJECT_PATH$OUT_NAME
# 编译
javac -d $PROJECT_PATH$OUT_NAME @source.list
rm source.list
# 编译好后的类路径
CLASS_PATH=$PROJECT_PATH$OUT_NAME
# 类文件名称
CLASS_=${FILE_PATH#*/src/}
CLASS_NAME=${CLASS_%.java}
echo "java -cp "$CLASS_PATH $CLASS_NAME
java -cp $CLASS_PATH $CLASS_NAME
#echo $CLASS_NAME
将此脚本存放到你想存放的位置,我放到了sublimeText存放用户配置目录下了
~/.config/sublime-text/Packages/User/***.sh
需要给此脚本赋予可执行权限chomd +x 脚本路径
SublimeText 编译系统代码
工具 => 编译系统 => 新建编译系统
{
/**
* 2022-05-23 更新: 解决控制台无法接收用户输入,
* 需要先在 sublimetext 中安装 terminus 插件
* 然后在构建配置文件中添加 "target": "terminus_exec", "cancel": "terminus_cancel_build",
*/
// 2022-05-23 ++++++++++++++++++++++++++++++++++++++++++++++
"target": "terminus_exec",
"cancel": "terminus_cancel_build",
// 2022-05-23 ++++++++++++++++++++++++++++++++++++++++++++++
"shell_cmd": "你存放shell脚本的路径 $file $folder"
}
然后保存,文件名称自由发挥,保存后在 工具 => 编译系统 能看到你刚才保存的名字,勾选这个选项,执行ctrl + b 就会进行编译和运行了
效果展示


解决SublimeText控制台用户输入问题
更新时间: 2022-05-23
Ctrl+Shift+P打开SublimeText控制面板 输入package Control: Install Package回车- 然后搜索
Terminus回车安装插件 - 打开你的构建文件
~/.config/sublime-text/Packages/User/***.sublime-build - 在
shell_cmd前添加"target": "terminus_exec", "cancel": "terminus_cancel_build", - 效果图:

结尾
根据自己的需求进行修改,思路已经放在上面了,还是那句话,对于初学者(也包括我自己)不建议在学习初期使用集成度过高的IDE,包括使用这个脚本,也建议是在自己了解如后手动编译与运行后再进行使用,对于IDE的快捷键学习不是初学的需要学的,还是把基础打牢了,才能盖更高的房子。

浙公网安备 33010602011771号