Запуск языкового сервера в Dockerfile: бинарный файл языкового сервера

Я построил простой языковой сервер, следуя этому руководству:

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 папок мне следует использовать? Реальные языковые серверы, которые я исследовал до сих пор, сильно отличаются от того, что я создал.

1 ответ

Решение

Приведенный выше проект, который я создал, используется для разработки плагинов Eclipse. Чтобы создать LS для запуска в Dockerfile, необходимо создать двоичный файл (я использовал fatJar) из проекта Eclipse Xtext, который должен быть создан, как описано в этом учебном пособии (Должен завершаться только до "Упаковки LS", включительно).). Обратите внимание, что при упаковке LS достаточно добавить следующий фрагмент кода в файл build.gradle проекта *.ide: -

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 и отправьте его в свою учетную запись 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.

Ура!

Другие вопросы по тегам