Posted at

VSCode Java Debugger for Java Build failed 原因と対策

More than 1 year has passed since last update.


Visual Studio Code でJavaのデバッグがしたい話



Debugger for Java Build failedになってしまう


sampleコード

設定等はこちらを参考にさせていただきました

Visual Studio Code を使った Javaプログラム事始め


test.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があるフォルダを指定するとなぜかワークスペースは一つ階層が上がった場所になる。:sweat_smile::sweat_smile::sweat_smile:

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を探しに行くが

[ファイル]->[フォルダーを開く]という動作を行うとワークスペースが一つ上の階層にあるためそんなものはない。:head_bandage:

よって

エラー: メイン・クラスtestが見つからなかったかロードできませんでした

となる。


対策

対策としてはワークスペースの場所をtest.javaがある場所にすれば良い

[ファイル]->[名前をつけてワークスペースを保存]

ここから適当な名前をつけて保存

.code-workspace

ができるので次回からは

[ファイル]->[ワークスペースを開く]

からこのファイルを開けばOK

なんで[ファイル]->[フォルダーを開く]をすると

ワークスペースが一つ階層が上がるのかはわからなかった。

どこか設定があるのかもしれない:thinking: