【发布时间】: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
-
制作了一个文件夹 Demo 并在其中添加了 Java 文件夹,我在其中添加了
file.java。 (Demo -> Java -> File.java) -
在
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 } }); -
我的
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)); } }); } }) -
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