-
Notifications
You must be signed in to change notification settings - Fork 7
Общая архитектура
В проекте используется система сборки Maven. В корневой директории qreal-web лежит pom файл, в котором прописаны имеющиеся приложения-модули и общие для них настройки и зависимости.
У каждого приложения своя собственная серверная часть, т.к. код в этих частях практически не пересекается.
Общая кодовая база содержится в приложении SharedResources. Остальные приложения используют скомпилированный в этом приложении код как стороннюю библиотеку. Скомпилированные в SharedResources библиотеки при сборке кладутся в папку https://github.com/qreal/qreal-web/tree/master/SharedResources/out. Также в это папке лежат и написанные файлы описания интерфейса библиотеки (.d.ts файлы). Так, например, основной код редактора диаграмм компилируется в фалй diagram-core.js, и имеется файл описания интерфейса diagram-core.d.ts.
Имеется 2 способа работы с кодом из SharedResources:
- Отдельное приложение.
В этом случае необходимые скрипты из SharedResources копируются в ресурсы данного приложения. Все остальные ресурсы здесь также свои (в том числе библиотеки, стили, изображения, конфигурационные файлы).
Плюсы этого подхода:
- Удобно разрабатывать клиентскую часть, т.к. при запуске через команду
tomcat7:run
изменения будут подтягиваться без пересборки всего веб-приложения.
Минусы:
- Приходится иметь собственные копии всех библиотек, изображений и других ресурсов.
- При обновлении библиотек из SharedResources, необходимо вручную их заменить.
- SharedResources как Overlay
Здесь приложение SharedResources используется как overlay (https://maven.apache.org/plugins/maven-war-plugin/overlays.html). Это означает, что при сборке war-архива разрабатываемого веб-приложения, оно сольется с war-архивом приложения SharedResources. Файлы, которые есть в обоих приложениях (с одним именем и в одной директории), остаются из разрабатываемого приложения.
При сборке SharedResources командой mvn clean install
, оно заносится в локальный репозиторий maven-а, и его можно использовать в зависимостях и оверлеях, что указывается в pom файлах.
В данном случае скрипты SharedResources скопируются в приложение при сборке war-архива. Но файлы описания интерфейсов нужны для успешной компиляции typescript-a, поэтому они в приложении должны быть свои.
Т.к. приложения сливаются в один war-архив, придется запускать приложение командой tomcat7:run-war
, чтобы сначала собрался war-архив, который уже запустится tomcat-ом.
Плюсы:
- Не нужно иметь свои копии всех библиотек.
- При обновлении скриптов SharedResources, не нужно вручную их менять, менять лишь придется файлы описания интерфейсов при их изменении.
Минусы:
- Из-за того, что запускается
tomcat7:run-war
, клиентский код при изменении не может автоматически обновиться, поэтому при каждом изменении придется пересобирать приложение, а это не очень быстрая оперция.
Для разработки удобнее использовать первый способ, для поддержки же второй.
Оба способа работы отражены в примерах.
Приложения Robot_diagram и StepicRobotsWeb используют второй способ работы.