关于vscode java项目 “找不到或者无法加载主类”错误与vscode工作区设置
关于vscode
最近也是偶然的机会了解到了vscode这个编辑器,相比于传统的IDE,它有很多我喜欢的特点,首先是轻量级,相比于Visual Studio,pycharm等IDE,它只有40多Mb的大小,下载和安装都很方便。其次就是它是一个编辑器,是通过插件来实现各种功能,意味着你可以通过vscode这一个软件安装不同的插件来实现编写不同代码的需求,而不是每一种语言都要下载一种IDE。最后就是它是微软的一款开源的软件,更新速度快,质量也有保证。
错误: 找不到或无法加载主类 App
下载安装好vscode,并且安装好相关的插件,我装备新建了一个“hellow java”文件试一试,但是却发现运行会报错“找不到或无法加载主类”。
我尝试在cmd里编译和运行,可以成功编译,但是运行时依然报错。
看了网上很多教程,最后发现更换编译和运行方式以后就可以了。
再来看看源代码
package app;
public class App {
public static void main(String[] args) throws Exception {
System.out.println("Hello Java");
}
}
原来问题出在了第一行,这里就是java的package机制了,java中package其实是定义了一个命名空间,防止命名冲突,而如果在源文件开头声明package的话就是要新建一个文件夹然后将编译好的源文件都放在里边,那么这里就不能用原来的编译和运行方式了。
vscode设置
但是我们总不能每一个源文件都自己这样编译和运行,那样太麻烦了,那么怎么改变vscode默认的编译运行方式呢?这里需要设置一些code_runner插件。
在vscode中,设置分俩种,一种是用户设置,就是设置了以后,你所以的项目通过vscode运行时都使用这种设置;而另一种则是工作区设置,这种设置只作用于你当前的项目
首先是用户设置,打开右下角设置
下拉选择“在setting.json中编辑”
然后在里边加入这段代码,这是code_runner插件的设置代码,可以在官方文档中看到,链接: code_runner 官方文档.
"code-runner.executorMap": {
// "javascript": "node",
// "php": "C:\\php\\php.exe",
// "python": "python",
// "perl": "perl",
// "ruby": "C:\\Ruby23-x64\\bin\\ruby.exe",
// "go": "go run",
// "html": "\"C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe\"",
"java": "cd $dir && javac $fileName && java $fileNameWithoutExt",
// "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt"
}
这里可以设置不同语言的安装目录,默认的话大部分都是在path中查找,其中java和c可以设置编译和运行的方式。其中的参数可以自己选择
upported customized parameters 自定义参数
$workspaceRoot: The path of the folder opened in VS Code
VS Code中打开的文件夹的路径
$dir: The directory of the code file being run
正在运行的代码文件的目录
$dirWithoutTrailingSlash: The directory of the code file being run without a trailing slash
正在运行的代码文件的目录,没有尾部斜杠
$fullFileName: The full name of the code file being run
正在运行的代码文件的全名
$fileName: The base name of the code file being run, that is the file without the directory
正在运行的代码文件的基本名称,即没有目录的文件
$fileNameWithoutExt: The base name of the code file being run without its extension
没有扩展名的情况下运行的代码文件的基本名称
$driveLetter: The drive letter of the code file being run (Windows only)
正在运行的代码文件的驱动器号(仅限Windows)
$pythonPath: The path of Python interpreter (set by Python: Select Interpreter command)
由于我这里只需要设置java的编译方式,别的选择默认就好,所以就把别的都注释掉了,只把java的命令改成了
"java": "cd $dir && javac -d. $fileName && java app.$fileNameWithoutExt",
这里的-d是更改编译目录,而"."代表是在当前目录下,虽然不加这个命令也是默认生成在当前目录下,但是如果文件里边有package关键字的话,这个命令可以自动在当前目录下生成package文件夹,而后边的运行也需要加上package名字。
这样就可以成功运行啦!
可以看到
编译方式被改变了,而且程序也是成功运行。
大家可以注意一些这里的用户设置setting.json 文件的储存位置。
但是这种方式有一个问题,就是我不同项目的package路径不一样,统一设置的话肯定会出问题,那么这里就用到工作区设置了。
首先创建一个新java项目(如何创建看我的另一篇文章)
然后进入工作区设置
然后选择“setting.json”
这样就会在当前文件夹(工作区)生成一个.vscode文件夹,里边有一个setting.json文件,然后像上边一样,把那部分文件复制进来覆盖默认设置即可。
这样这里的设置就只对当前文件内的内容有效了。