diff --git a/src/configurationProvider.ts b/src/configurationProvider.ts index 91882259..17eb273e 100644 --- a/src/configurationProvider.ts +++ b/src/configurationProvider.ts @@ -307,7 +307,10 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration } if (process.platform === "win32" && config.console !== "internalConsole") { - config.launcherScript = utility.getLauncherScriptPath(); + const launcherScript: string = utility.getLauncherScriptPath(); + if (!launcherScript.includes(" ") || !utility.isGitBash(config.console === "integratedTerminal")) { + config.launcherScript = launcherScript; + } } } else if (config.request === "attach") { if (config.hostName && config.port) { diff --git a/src/utility.ts b/src/utility.ts index 55510f4d..377cb0a0 100644 --- a/src/utility.ts +++ b/src/utility.ts @@ -215,6 +215,18 @@ export function getLauncherScriptPath() { return path.join(ext.extensionPath, "scripts", "launcher.bat"); } +export function isGitBash(isIntegratedTerminal: boolean): boolean { + const currentWindowsShellPath: string | undefined = isIntegratedTerminal ? vscode.env.shell : + vscode.workspace.getConfiguration("terminal")?.get("external.windowsExec"); + if (!currentWindowsShellPath) { + return false; + } + + const candidates: string[] = ["Git\\bin\\bash.exe", "Git\\bin\\bash", "Git\\usr\\bin\\bash.exe", "Git\\usr\\bin\\bash"]; + const find: string | undefined = candidates.find((candidate: string) => currentWindowsShellPath.endsWith(candidate)); + return !!find; +} + export enum ServerMode { STANDARD = "Standard", LIGHTWEIGHT = "LightWeight",