in src/utils/mavenUtils.ts [58:109]
async function executeInBackground(mvnArgs: string, pomfile?: string): Promise<any> {
const mvn: string | undefined = await getMaven(pomfile);
if (mvn === undefined) {
throw new MavenNotFoundError();
}
const command: string = wrappedWithQuotes(mvn);
// TODO: re-visit cwd
const workspaceFolder: vscode.WorkspaceFolder | undefined = pomfile ? vscode.workspace.getWorkspaceFolder(vscode.Uri.file(pomfile)) : undefined;
const cwd: string | undefined = workspaceFolder ? path.resolve(workspaceFolder.uri.fsPath, mvn, "..") : undefined;
const userArgs: string | undefined = Settings.Executable.options(pomfile);
const mvnSettingsFile: string | undefined = Settings.getSettingsFilePath();
const mvnSettingsArg: string | undefined = mvnSettingsFile ? `-s "${await mavenTerminal.formattedPathForTerminal(mvnSettingsFile)}"` : undefined;
const matched: RegExpMatchArray | null = [mvnSettingsArg, mvnArgs, userArgs].filter(Boolean).join(" ").match(/(?:[^\s"]+|"[^"]*")+/g); // Split by space, but ignore spaces in quotes
const args: string[] = matched !== null ? matched : [];
if (pomfile) {
args.push("-f", `"${pomfile}"`);
}
const spawnOptions: child_process.SpawnOptions = {
cwd,
env: Object.assign({}, process.env, Settings.getEnvironment(pomfile)),
shell: true
};
return new Promise<{}>((resolve: (value: any) => void, reject: (e: Error) => void): void => {
mavenOutputChannel.appendLine(`Spawn ${JSON.stringify({ command, args })}`);
const proc: child_process.ChildProcess = child_process.spawn(command, args, spawnOptions);
proc.on("error", (err: Error) => {
reject(new Error(`Error occurred in background process. ${err.message}`));
});
proc.on("exit", (code: number, signal: string) => {
if (code !== null) {
if (code === 0) {
resolve(code);
} else {
reject(new Error(`Background process terminated with code ${code}.`));
}
} else {
reject(new Error(`Background process killed by signal ${signal}.`));
}
});
if (proc.stdout !== null) {
proc.stdout.on("data", (chunk: Buffer) => {
mavenOutputChannel.append(chunk.toString());
});
}
if (proc.stderr !== null) {
proc.stderr.on("data", (chunk: Buffer) => {
mavenOutputChannel.append(chunk.toString());
});
}
});
}