Sublime Text 编译 Java 包更新记录 2022/05/23 解决SublimeText控制台用户输入问题 前言 目前还存在很多问题,不过暂时能用,就先不折腾了,等日后遇到什么问题再进行修改,同时我也会同步
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
执行编译的时候调用这个脚本
#!/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
# 编译
javac -d $PROJECT_PATH$OUT_NAME$PROJECT_FILE_NAME @source.list
rm source.list
# 编译好后的类路径
CLASS_PATH=$PROJECT_PATH$OUT_NAME$PROJECT_FILE_NAME
# 类文件名称
CLASS_=${FILE_PATH#*/src/}
CLASS_NAME=${CLASS_%.java}
java -cp $CLASS_PATH $CLASS_NAME
将此脚本存放到你想存放的位置,我放到了sublimeText
存放用户配置目录下了
~/.config/sublime-text/Packages/User/***.sh
需要给此脚本赋予可执行权限chomd +x 脚本路径
工具 => 编译系统 => 新建编译系统
{
/**
* 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
就会进行编译和运行了
更新时间: 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
的快捷键学习不是初学的需要学的,还是把基础打牢了,才能盖更高的房子。