运行 Dockerfile 中的语言服务器:语言服务器的二进制文件

Running a language server in a Dockerfile: Binary file of the Language Server

我按照本教程构建了一个简单的语言服务器:

http://www.eclipse.org/Xtext/documentation/102_domainmodelwalkthrough.html

在此服务器中,我有 5 个文件夹,

org.example.domainmodel
org.example.domainmodel.ide
org.example.domainmodel.tests
org.example.domainmodel.ui
org.example.domainmodel.ui.tests

现在我需要 运行 这个语言服务器在一个 Docker 图像中,并且需要它的二进制目录。我应该使用上述 5 个文件夹中的哪个二进制目录?到目前为止,我探索过的实际语言服务器与我创建的完全不同。

我创建的上述项目用于开发Eclipse 插件。要在 Docker 文件中创建到 运行 的 LS,需要从 Eclipse Xtext 项目创建一个二进制文件(我使用 fatJar),该文件应按照 this tutorial 中的说明创建(最多应该完成 'Packaging the LS',包括在内)。注意打包LS时,在*.ide项目的build.gradle文件中加入如下代码片段即可:-

shadowJar {
    baseName = 'dsl-language-server'
    classifier = null
    version = null
}

之后,应该在命令提示符下通过gradle shadowJar命令构建父项目。完成后,将在以下路径中创建一个 .jar 文件:*.ide/build/libs

然后您需要创建一个单独的目录并将构建文件夹复制并粘贴到其中,并创建一个名为 dockerfile 的文件(无文件扩展名)并在其中包含以下代码:-

FROM barais/eclipse-xtend
ADD build/libs/dsl-language-server-ls.jar dsl-language-server-ls.jar
RUN sudo apt-get install socat
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y  software-properties-common && \
    add-apt-repository ppa:webupd8team/java -y && \
    apt-get update && \
    echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections && \
    apt-get install -y oracle-java8-installer && \
    apt-get clean
CMD socat TCP4-LISTEN:4417,reuseaddr,fork EXEC:"java -jar dsl-language-server-ls.jar"

然后使用 Docker 构建此文件,并将其作为 repo 推送到您的 Docker Hub 帐户。使用以下方法在 Eclipse Che 中创建一个新堆栈,以使用来自 Docker Hub 的推送回购作为语言服务器:-

services:
 dsl-language-server-ls:
  image : <youraccountname>/mydsl
  mem_limit : 1073741824
 dev-machine:
  image : eclipse/ubuntu_jdk8
  mem_limit : 2147483648
  depends_on:
   - dsl-language-server-ls

编辑原始配置并在配置中的相应位置使用以下代码更新它(阅读 che doc 了解更多信息:-

"id": "mydsl-ls",
      "internal": "true",
      "type": "ls",
      "languageRegexes": "[ {\"languageId\":\"mydsllang\", \"regex\":\".*\\.mydsl$\"}]"

在 Eclipse Che 的新项目中创建一个文件,使用您添加的文件扩展名 (.mydsl),LS 将开始 运行,允许您在 DSL 中编写代码。

耶!