使用maven原型创建AEM项目

时间:2016-07-22 10:35:54

标签: aem maven-archetype

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

1 个答案:

答案 0 :(得分:3)

您可以在Github上找到Adobe-Marketing-Cloud空间中提供的基线结构 - aem-project-archetype

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

  • 核心:核心捆绑(java代码在这里)
  • it.launcher - 支持使用AEM进行集成测试的基线包
  • it.test - 集成测试
  • ui.apps - 您的组件,模板等代码的模块。
  • ui.content - 项目样本/测试内容或可能是实际内容(代码库中的实际内容不是一个好习惯)

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

  1. 是多个品牌的实施还是跨多个项目使用
  2. 是否需要提供基本/核心功能/特性的平台,以便通过不同的实现进行扩展
  3. 项目的路线图是什么
  4. 尽管如此,最佳做法是将接口和实现分成不同的模块。大多数模块将有3个子模块(api,core和package)。

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

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

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

    模块数量可能因项目而异,一些常见的可重复使用模块可能包括 -

    1。集结设置

    此文件夹可以容纳常用的设置和脚本:   - CI服务器脚本/设置   - Maven的settings.xml   - 特定于项目的可重复使用的bash配置文件等。

    2。通用模块

    这将有[api,核心和内容子模块]。顾名思义,这应该具有不属于任何模块的通用服务或实用程序类,或者可以在所有模块中使用。要特别小心并证明在这个模块中添加类的理由,否则一切都会出现在普通模块上。

    第3。 UI模块

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

    我们在内容模块/apps/<your_project>/ui

    中创建了以下结构
    • 组件:所有组件都在这里。进一步分类为[内容,全局,脚本]
    • 安装
    • page:page components
    • 模板:页面模板

    4。配置模块

    该模块用于携带OSGI,云配置以及是否实现基于/ conf的实现。基于Conf的实施样本here

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

    5。吊索错误处理程序模块

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

    6。设计模块

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

    7。内容模块

    打包示例内容和/或测试内容。在某些实现中,我们选择将测试内容保留为单独的模块。

    8。完整模块

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

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

    • Grunt / Gulp build
    • 服务/运营(业务层)
    • 验证
    • 数据导入
    • Incontainer tests
    • Incontainer测试内容

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

    示例parent.pom here