public async startBootApp()

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
            })
        );
    }