当前位置 : 主页 > 编程语言 > 其它开发 >

Sublime Text 编译 运行 Java 源代码 包 类文件

来源:互联网 收集:自由互联 发布时间:2022-05-30
Sublime Text 编译 Java 包更新记录 2022/05/23 解决SublimeText控制台用户输入问题 前言 目前还存在很多问题,不过暂时能用,就先不折腾了,等日后遇到什么问题再进行修改,同时我也会同步
Sublime Text 编译 Java 包 更新记录

2022/05/23 解决SublimeText控制台用户输入问题

前言

目前还存在很多问题,不过暂时能用,就先不折腾了,等日后遇到什么问题再进行修改,同时我也会同步更新博文

目前存在问题:

  1. 没有对 不存在 main 方法的类进行特别处理,在不存在main方法的类中使用Ctrl + b进行编译会报错,报错原因只是不能执行没有 main 方法的类而以,实际上是已经编译通过的 (其实在运行代码前进行一次if判断配合 egrep 使用正则表达式匹配是否有 main方法 就能解决,但是这个问题对我目前来说不是要紧的所以没有进行处理)
  2. 每次编译都会将整个项目进行重新编译,原来编译完成的类文件会被删除
  3. 要求项目结构与intellij idea一样,将源代码储存至 src
  4. 如果package声明的包位置与当前原代码的实际位置不一致依旧会报错,编译是可以通过的,只是不能在sublime text中运行(因为我运行代码的策略采用的是获取当前源代码的路径,使用表达式提取出包的位置后直接运行,这个没处理是因为为个人觉得,既然这个类不属于这个包,为何要将这个类的源代码写在这个包里,等以后遇上必须使用这种写法的时候我再处理吧)
  5. 控制台无法接收任何用户输入。(这个问题与脚本无关) 已解决
  6. 其他问题欢迎补充,也欢迎对脚本进行完善。个人并没有专门学习shell脚本,都是边研究边写的。代码比较烂,欢迎大佬帮忙修正。

以下脚本仅适合 Linux 使用,其他系统可以参考实现思路,自行编写脚本

实现思路:

  1. 编写shell脚本对 Java源代码进行编译 编译完成后运行 当前代码
    1. shell 脚本需要外界传递 当前源文件的绝对路径 和 当前打开的项目的绝对路径
    2. 获取要编译的源文件的绝对路径
    3. 从这个绝对路径中提取出 项目名称 项目路径
    4. 使用 find 源代码路径 -name "*.java" > source.list获取这个项目中所有源文件的路径,并重定向到 source.list 文件中
    5. 如果输出路径上存在这个项目的类文件则将类文件删除
    6. 使用 javac -d $PROJECT_PATH$OUT_NAME$PROJECT_FILE_NAME @source.list对整个项目进行编译
    7. 提取出输出路径中存放类文件的绝对路径
    8. 从源文件的绝对路径中提取出 包到源文件的路径并去掉后面的.java
    9. 使用 java -cp 提取出来的类文件路径 提取出来的包到源文件的路径 运行这份代码
  2. 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
# 编译
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 脚本路径

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 就会进行编译和运行了

效果展示

image-20220518032228112

image-20220518032306410

解决SublimeText控制台用户输入问题

更新时间: 2022-05-23

  1. Ctrl+Shift+P 打开SublimeText控制面板 输入 package Control: Install Package 回车
  2. 然后搜索 Terminus 回车安装插件
  3. 打开你的构建文件 ~/.config/sublime-text/Packages/User/***.sublime-build
  4. shell_cmd 前添加 "target": "terminus_exec", "cancel": "terminus_cancel_build",
  5. 效果图:image-20220524000159972
结尾

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

【文章原创作者:ddos攻击防御 http://www.558idc.com/aqt.html欢迎留下您的宝贵建议】
网友评论