0

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

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 个文件夹中的哪个二进制目录?到目前为止,我探索的实际语言服务器与我创建的完全不同。

4

1 回答 1

0

我创建的上述项目用于开发 Eclipse 插件。要创建 LS 以在 Dockerfile 中运行,需要从 Eclipse Xtext 项目中创建一个二进制文件(我使用 fatJar),该文件应按照本教程中的说明创建(应仅完成“打包 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 文档以获取更多信息:-

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

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

耶!

于 2018-11-06T04:09:05.483 回答