in src/Controller.ts [43:91]
public async startBootApp(app: BootApp, debug?: boolean): Promise<void> {
const mainClasData = await vscode.window.withProgress(
{ location: vscode.ProgressLocation.Window, title: `Resolving main classes for ${app.name}...` },
() => { return this._getMainClass(app); }
);
if (mainClasData === null) {
vscode.window.showWarningMessage("No main class is found.");
return;
}
if (mainClasData === undefined) {
return;
}
let targetConfig = this._getLaunchConfig(mainClasData);
if (!targetConfig) {
targetConfig = await this._createNewLaunchConfig(mainClasData);
}
app.activeSessionName = targetConfig.name;
let jmxport = await getPort();
app.jmxPort = jmxport;
let vmArgs = [
'-Dcom.sun.management.jmxremote',
`-Dcom.sun.management.jmxremote.port=${jmxport}`,
'-Dcom.sun.management.jmxremote.authenticate=false',
'-Dcom.sun.management.jmxremote.ssl=false',
'-Djava.rmi.server.hostname=localhost',
'-Dspring.application.admin.enabled=true',
'-Dspring.jmx.enabled=true'
];
if (targetConfig.vmArgs) {
var mergeArgs;
// TODO: smarter merge? What if user is trying to enable jmx themselves on a specific port they choose, for example?
if (typeof targetConfig.vmArgs === 'string') {
mergeArgs = targetConfig.vmArgs.split(/\s+/);
} else { // array case
mergeArgs = targetConfig.vmArgs;
}
vmArgs.splice(vmArgs.length, 0, ...mergeArgs);
}
const cwdUri: vscode.Uri = vscode.Uri.parse(app.path);
await vscode.debug.startDebugging(
vscode.workspace.getWorkspaceFolder(cwdUri),
Object.assign({}, targetConfig, {
noDebug: !debug,
cwd: cwdUri.fsPath,
vmArgs
})
);
}