繁体   English   中英

摩纳哥客户端无法连接到 Eclipse JDT 服务器

[英]Monaco client won't connect to Eclipse JDT server

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

Monaco client link: https://github.com/TypeFox/monaco-languageclient Eclipse JDT server: 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 (演示 -> 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, ie 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?

尝试在 - 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'
    ]);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM