使用 maven 原型创建 AEM 项目

Using maven archetype to create an AEM project

当我们生成一个maven AEM项目时,我们如何决定使用的原型?相同的决定因素和最佳实践是什么?

您可以在 Github - aem-project-archetype

上找到 Adob​​e-Marketing-Cloud space 中提供的基线结构

这是一个非常基本的结构,可以为您提供以下模块 -

  • 核心:核心包(java 代码在此处)
  • it.launcher - 支持 AEM 集成测试的基线包
  • it.test - 集成测试
  • ui.apps - 组件、模板等代码的模块。
  • ui.content - 项目 sample/test 内容或可能是实际内容(代码库中的实际内容不是一个好的做法)

在决定项目结构之前要了解的重要事项是 -

  1. 是针对多个品牌实施还是跨多个项目使用
  2. 是否需要平台提供 basic/core functionality/features 以通过不同的实现进行扩展
  3. 项目的路线图是什么

也就是说,最佳做法是将接口和实现分离到不同的模块中。大多数模块将有 3 个子模块(api、核心和包)。

  • api:OSGi 规范描述了一个模块化系统,具有单独的 api 捆绑
  • 核心:提供服务的实施包
  • package:打包 2 个包以生成 AEM 内容包。

也可以有包含不含 api/service 内容的包。这些模块不遵循 osgi 包的约定,例如配置、组件、设计等。

在我们的大多数 AEM 实施中,项目是从 com.cqblueprints.archetypes: 多模块 Maven 原型生成的,其文件夹结构根据 AEM 6 实施指南进行了重构。 创建的所有模块都是为了以更好的方式组织依赖关系,并清楚地分离包部署。

模块数量可能因项目而异,一些常见的可重用模块作为基准可能包括 -

1.构建设置

此文件夹可以存放常用的设置和脚本: - CI 服务器 scripts/setting - Maven 的 settings.xml - 可重用 bash 特定于项目等的配置文件

2。通用模块

这将有 [api,核心和内容子模块]。顾名思义,这应该具有不属于任何模块或可以跨所有模块使用的通用服务或实用程序 类。要格外小心,并证明在这个模块中添加 类 的理由,否则作为不当行为,所有内容最终都会出现在公共模块中。

3。 UI模块

这将有 [api(如果您需要此处的 OSGI 服务,则可选)、核心和内容子模块]。 - 核心模块包含所有 SlingModel、WCMUse 扩展和 支持 Pojos。 - 包含与组件、模板相关的所有 UI 功能的内容包。正确构建此模块非常重要,这样组件、页面等的添加就不会使其难以管理。


我们在内容模块中创建了以下结构,/apps/<your_project>/ui

  • components :所有组件都在这里。进一步子分类为 [content,global,scripts]
  • 安装
  • 页面:页面组件
  • 模板:页面模板

4.配置模块

此模块用于承载 OSGI、云配置,如果实现了基于 /conf 的实现。基于 Conf 的实现示例 here

  • OSGI 配置模块:将所有配置作为内容打包模块。
  • 云配置模块:将所有配置作为内容打包模块

5. Sling 错误处理程序模块

任何错误处理内容都应放在此处。示例配置有作者模式显示错误堆栈,在发布模式下它 returns 404 响应。

6.设计模块

任何错误处理内容都应放在此处。示例配置有作者模式显示错误堆栈,在发布模式下它 returns 404 响应。

7.内容模块

打包样本内容and/or测试内容。在某些实现中,我们选择将测试内容保留为单独的模块。

8.完成模块

最后编译的包模块,将上述模块生成的所有包组合成一个包部署到服务器。

如果您的应用程序有很多业务逻辑或处理,您可以添加更多模块,例如在几个项目中我们也有以下附加模块 -

  • Grunt/Gulp 建造
  • Services/Operations(针对业务层)
  • 验证
  • 数据导入
  • 容器内测试
  • Incontainer测试内容

除此之外,我们还创建了一个 pom 项目,该项目抽象了所有特定于 AEM 项目的依赖项、配置、插件和配置文件,并将其用作项目 POM 的父项。这清理了项目 pom 并允许同一客户跨项目重用。

样本parent.pomhere