【问题标题】:Monaco client won't connect to Eclipse JDT serverMonaco 客户端无法连接到 Eclipse JDT 服务器
【发布时间】:2021-08-07 14:42:01
【问题描述】:

我想将 Java Intellisense 添加到我的 Monaco 客户端。为此,我将 Eclipse JDT 服务器与 Monaco 客户端连接起来。

摩纳哥客户链接:https://github.com/TypeFox/monaco-languageclient Eclipse JDT 服务器:https://github.com/eclipse/eclipse.jdt.ls.git

我能够按照他们的文档构建和运行 JDT 服务器和 Monaco 客户端。

我正在运行 Monaco express 服务器,该服务器位于 Monaco repo 的 example 文件夹中。

我在运行之前在 Monaco repo 中进行了以下更改:yarn run start

  1. 制作了一个文件夹 Demo 并在其中添加了 Java 文件夹,我在其中添加了 file.java。 (Demo -> Java -> File.java)

  2. client.ts 文件中进行了更改,这就是它的外观:

     // register Monaco languages
    monaco.languages.register({
    id: 'java',
    extensions: ['.java'],
    aliases: [java],
    mimetypes: ['application/text']
      })
    
    
    monaco.editor.create(document.getElementById("container")!, {
        model: monaco.editor.createModel(value, 'java', monaco.Uri.parse('file:///home/imocha/python-lang-cli/monaco-languageclient/example/src/java/file.java')),
        glyphMargin: true,
        lightbulb: {
            enabled: true
        }
    });
    
    // register Monaco languages
    monaco.languages.register({
        id: 'java',
        extensions: ['.java'],
        aliases: [java],
        mimetypes: ['application/text']
      })
    
    
    monaco.editor.create(document.getElementById("container")!, {
        model: monaco.editor.createModel(value, 'java', monaco.Uri.parse('file:///home/imocha/python-lang-cli/monaco-languageclient/example/src/java/file.java')),
        glyphMargin: true,
        lightbulb: {
            enabled: true
        }
    });
    
    
    // register Monaco languages
    monaco.languages.register({
        id: 'java',
        extensions: ['.java'],
        aliases: [java],
        mimetypes: ['application/text']
      })
    
    
    monaco.editor.create(document.getElementById("container")!, {
        model: monaco.editor.createModel(value, 'java', monaco.Uri.parse('file:///home/imocha/python-lang-cli/monaco-languageclient/example/src/java/file.java')),
        glyphMargin: true,
        lightbulb: {
            enabled: true
        }
    });
    
    
    // register Monaco languages
    monaco.languages.register({
        id: 'java',
        extensions: ['.java'],
        aliases: [java],
        mimetypes: ['application/text']
      })
    
    
    monaco.editor.create(document.getElementById("container")!, {
        model: monaco.editor.createModel(value, 'java', monaco.Uri.parse('file:///home/imocha/python-lang-cli/monaco-languageclient/example/src/java/file.java')),
        glyphMargin: true,
        lightbulb: {
            enabled: true
        }
    });
    
  3. 我的server.ts 文件如下:

    import * as ws from "ws";
    import * as http from "http";
    import * as url from "url";
    import * as net from "net";
    import * as express from "express";
    import * as rpc from "@codingame/monaco-jsonrpc";
    import { launch } from "./json-server-launcher";
    
    
    process.on('uncaughtException', function (err: any) {
        console.error('Uncaught Exception: ', err.toString());
        if (err.stack) {
            console.error(err.stack);
        }
    });
    
    // create the express application
    const app = express();
    // server the static content, i.e. index.html
    app.use(express.static(__dirname));
    // start the server
    const server = app.listen(3000);
    // create the web socket
    const wss = new ws.Server({
        noServer: true,
        perMessageDeflate: false
    });
    server.on('upgrade', (request: http.IncomingMessage, socket: net.Socket, head: Buffer) => {
        const pathname = request.url ? url.parse(request.url).pathname : undefined;
        if (pathname === '/sampleServer') {
            wss.handleUpgrade(request, socket, head, webSocket => {
                const socket: rpc.IWebSocket = {
                    send: content => webSocket.send(content, error => {
                        if (error) {
                            throw error;
                        }
                    }),
                    onMessage: cb => webSocket.on('message', cb),
                    onError: cb => webSocket.on('error', cb),
                    onClose: cb => webSocket.on('close', cb),
                    dispose: () => webSocket.close()
                };
                // launch the server when the web socket is opened
                if (webSocket.readyState === webSocket.OPEN) {
                    launch(socket);
                } else {
                    webSocket.on('open', () => launch(socket));
                }
            });
        }
    })
    
  4. Monaco 客户端 websocket 在端口 4000 上部署。

我使用代码运行我的Eclipse JDT 服务器:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044 -Declipse.application=org.eclipse.jdt.ls.core.id1 -Dosgi.bundles.defaultStartLevel=4 -Declipse.product=org.eclipse.jdt.ls.core.product -Dlog.level=ALL -noverify -Xmx1G -jar ./plugins/org.eclipse.equinox.launcher_1.6.100.v20201223-0822.jar -configuration ./config_linux -data /home/n --add-modules=ALL-SYSTEM --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED -CLIENT_PORT=4000

我使用以下命令运行我的摩纳哥客户端:

yarn run start

问题在于(Eclipse JDT 和 Monaco 客户端以及 websocket)都在各自的端口上启动并处于活动状态,但没有通信。

如何将 Eclpse JDT 连接到 Monaco 客户端的 websocket?

【问题讨论】:

  • @namanb009 你解决了吗?
  • 不,我还是卡住了

标签: java backend eclipse-jdt monaco-editor language-server-protocol


【解决方案1】:

尝试将以下代码添加到 - monaco-languageclient/example/src/json-server-launcher.ts

        const serverConnection = server.createServerProcess('JSON', 'java', [
        '-Declipse.application=org.eclipse.jdt.ls.core.id1', 
        '-Dosgi.bundles.defaultStartLevel=4',
        '-Declipse.product=org.eclipse.jdt.ls.core.product',
        '-Dlog.level=ALL',
        '-noverify',
        '-Xmx1G',
        '-jar',
        '/home/pawansingh/projects/eclipse.jdt.ls/org.eclipse.jdt.ls.product/target/repository/plugins/org.eclipse.equinox.launcher_1.6.400.v20210924-0641.jar',
        '-configuration',
        '/home/pawansingh/projects/eclipse.jdt.ls/org.eclipse.jdt.ls.product/target/repository/config_linux',
        '-data',
        '/home/pawansingh/projects/monaco-languageclient/example/src/java',        
        '--add-modules=ALL-SYSTEM',
        '--add-opens java.base/java.util=ALL-UNNAMED',
        '--add-opens java.base/java.lang=ALL-UNNAMED',
        '-DCLIENT_PORT=4000'
    ]);

注意:-- 根据您的项目设置更改文件夹名称。

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多