Visual Studio Code でJavaのデバッグがしたい話
Debugger for Java Build failedになってしまう
sampleコード
設定等はこちらを参考にさせていただきました
Visual Studio Code を使った Javaプログラム事始め
public class test {
public static void main(String[] args) {
for (int i = 0; i < 10; i++)
sayHello();
}
private static void sayHello() {
System.out.println("こんにちは世界!");
}
}
最初は上手くいくが
2回目以降VSCodeを開き直してもう一度実行するとエラーを履いてdebugができない事象に遭遇
VSCode Java Debugger for Java Build failed エラー
これ。
デバッグコンソールには
エラー: メイン・クラスtestが見つからなかったかロードできませんでした
ってでてくる。
「java メイン・クラス が見つからなかったかロードできませんでした」
「VS code Debugger for Java Build failed」
とかでググると
パスが間違っているのが原因と多くの記事に書いてある。
しかしこんなシンプルなソースでしかも1回目はうまくいくのに意味不明である。
原因
VSCodeのワークスペースが問題。
VSCodeで[ファイル]->[フォルダーを開く]から
test.javaがあるフォルダを指定するとなぜかワークスペースは一つ階層が上がった場所になる。
debugの際にVScodeはlaunch.jsonを参照するが自動で作成されるものはこれ
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug (Launch)",
"request": "launch",
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"stopOnEntry": false,
"mainClass": "",
"args": ""
},
{
"type": "java",
"name": "Debug (Launch)-test",
"request": "launch",
"cwd": "${workspaceFolder}",
"console": "internalConsole",
"stopOnEntry": false,
"mainClass": "test",
"args": ""
},
{
"type": "java",
"name": "Debug (Attach)",
"request": "attach",
"hostName": "localhost",
"port": "<debug port of remote debuggee>"
}
]
}
"cwd": "${workspaceFolder}"
こいつがあるのでワークスペースを参照してtest.javaを探しに行くが
[ファイル]->[フォルダーを開く]という動作を行うとワークスペースが一つ上の階層にあるためそんなものはない。
よって
エラー: メイン・クラスtestが見つからなかったかロードできませんでした
となる。
対策
対策としてはワークスペースの場所をtest.javaがある場所にすれば良い
[ファイル]->[名前をつけてワークスペースを保存]
ここから適当な名前をつけて保存
.code-workspace
ができるので次回からは
[ファイル]->[ワークスペースを開く]
からこのファイルを開けばOK
なんで[ファイル]->[フォルダーを開く]をすると
ワークスペースが一つ階層が上がるのかはわからなかった。
どこか設定があるのかもしれない