Запуск языкового сервера в 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.
Ура!