Когда мы создаем проект Maven AEM, как мы определяем, какой архетип использовать? Каковы решающие факторы и передовой опыт для этого?
Использование архетипа maven для создания проекта AEM
Ответы (1)
Базовую структуру можно найти в пространстве Adobe-Marketing-Cloud на Github - aem -проект-архетип
Это очень простая структура для начала, которая предоставляет вам следующие модули:
- Core: Core bundle (здесь java-код)
- it.launcher - Базовый пакет для поддержки тестов интеграции с AEM
- it.test - Интеграционные тесты
- ui.apps - Модуль для ваших компонентов, кода шаблона и т. д.
- ui.content - образец / тестовое содержимое проекта или может быть фактическое содержимое (фактическое содержимое в кодовой базе не является хорошей практикой)
Перед принятием решения о структуре вашего проекта важно знать следующее:
- Реализация для нескольких брендов или для использования в нескольких проектах
- Есть ли необходимость в платформе, которая обеспечивает базовую / базовую функциональность / возможности, которые могут быть расширены различными реализациями?
- Какова дорожная карта проекта
Тем не менее, лучше всего разделить интерфейс и реализацию на разные модули. Большинство модулей будет иметь 3 подмодуля (api, core и package).
- api: спецификация OSGi описывает модульную систему с отдельным пакетом api
- core: Пакет реализации, предоставляющий услугу.
- package: упаковка 2 пакетов для создания пакета содержимого AEM.
Также могут быть пакеты, содержащие содержимое без api / service. Такие модули не соответствуют соглашениям о пакетах osgi, например конфигурации, компонентам, дизайну и т. Д.
В большинстве наших реализаций AEM проект был создан на основе com.cqblueprints.archetypes: многомодульного архетипа Maven, а его структура папок была переработана в соответствии с рекомендациями по внедрению AEM 6. Все созданные модули предназначены для лучшей организации зависимостей и четкого разделения развертывания пакетов.
Количество модулей может варьироваться в зависимости от проекта, некоторые распространенные повторно используемые модули в качестве базового уровня могут включать:
1. build-settings
Эта папка может содержать часто используемые настройки и скрипты: - Скрипты / настройки сервера CI - Maven settings.xml - Многоразовый профиль bash, специфичный для проекта и т. Д.
2. Общий модуль
В нем будут [подмодули api, core и content]. Как следует из названия, в нем должны быть общие служебные или служебные классы, которые не принадлежат какому-либо модулю или могут использоваться во всех модулях. Будьте особенно осторожны и обосновывайте причину добавления классов в этот модуль, иначе как злоупотребление служебным положением все заканчивается в общем модуле.
3. Модуль пользовательского интерфейса
В нем будут [api (необязательно, если вам нужны службы OSGI), основные и контентные подмодули]. - Основной модуль содержит все ваши расширения SlingModel, WCMUse и поддержку Pojos. - Пакет содержимого, содержащий все ваши функции пользовательского интерфейса, связанные с компонентами, шаблонами. Важно правильно структурировать этот модуль, чтобы добавление компонентов, страниц и т. Д. Не делало его неуправляемым.
Мы создали следующую структуру в модуле контента, /apps/<your_project>/ui
- компоненты: все компоненты идут сюда. Далее подкатегории [контент, глобальные, скрипты]
- установить
- page: компоненты страницы
- шаблоны: шаблоны страниц
4. Модуль конфигураций
Этот модуль для переноса OSGI, облачных конфигураций, а также, если он реализован, реализаций на основе / conf. Пример реализации на основе Conf здесь
- Модуль конфигураций OSGI: пакетный модуль со всеми конфигурациями в качестве содержимого.
- Модуль облачной конфигурации: пакетный модуль со всеми конфигурациями в качестве содержимого
5. Модуль обработки ошибок стропа
Здесь должно находиться любое содержимое для обработки ошибок. Пример конфигурации имеет стек ошибок отображения в авторском режиме, а в режиме публикации возвращает ответ 404.
6. Модуль "Дизайн"
Здесь должно находиться любое содержимое для обработки ошибок. Пример конфигурации имеет стек ошибок отображения в авторском режиме, а в режиме публикации возвращает ответ 404.
7. Модуль содержания
Пакеты образцов содержимого и / или тестового содержимого. В некоторых реализациях мы решили сохранить тестовый контент как отдельный модуль.
8. Полный модуль
Это модуль пакета, который компилируется последним и объединяет все пакеты, сгенерированные в вышеуказанных модулях, в один пакет для развертывания на сервере.
Если в вашем приложении много бизнес-логики или обработки, вы можете добавить больше модулей, например, в нескольких проектах у нас также есть следующие дополнительные модули:
- Сборка Grunt / Gulp
- Услуги / Операции (для бизнес-уровня)
- Валидации
- Импорт данных
- Тесты в контейнере
- Содержимое теста в контейнере
В дополнение к этому мы создали проект pom, который абстрагирует все зависимости, конфигурации, плагины, профили, специфичные для проекта AEM, и использовали его в качестве родительского для POM проекта. Это очистило проектную площадку и позволило повторно использовать проекты для одного и того же клиента.
Пример parent.pom
здесь