使用maven原型创建AEM项目

使用maven原型创建AEM项目,aem,maven-archetype,Aem,Maven Archetype,当我们生成maven AEM项目时,我们如何确定要使用的原型?决定因素和最佳实践是什么?您可以在Github上的Adobe Marketing Cloud space中找到基线结构- 这是一个非常基本的结构开始,并为您提供以下模块- 核心:核心包(这里是java代码) it.launcher-支持与AEM集成测试的基线包 it.test-集成测试 ui.apps-组件、模板等代码的模块 ui.content-项目样本/测试内容或可能是实际内容(代码库中的实际内容不是一个好的实践) 在决定项目

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

您可以在Github上的Adobe Marketing Cloud space中找到基线结构-

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

  • 核心:核心包(这里是java代码)
  • it.launcher-支持与AEM集成测试的基线包
  • it.test-集成测试
  • ui.apps-组件、模板等代码的模块
  • ui.content-项目样本/测试内容或可能是实际内容(代码库中的实际内容不是一个好的实践)
在决定项目结构之前需要知道的重要事情是-

  • 是针对多个品牌实施,还是跨多个项目使用
  • 是否需要提供基本/核心功能/特性的平台,以通过不同的实现进行扩展
  • 项目的路线图是什么
  • 也就是说,最佳实践是将接口和实现分离到不同的模块中。大多数模块将有3个子模块(api、核心和包)

    • api:OSGi规范描述了具有单独api的模块化系统 捆
    • 核心:提供服务的实现包
    • 包:打包2个包以生成AEM内容包
    也可能存在由没有api/服务的内容组成的包。这些模块不遵循osgi包的约定,例如配置、组件、设计等

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

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

    1。生成设置 此文件夹可以保存常用的设置和脚本: -CI服务器脚本/设置 -Maven的settings.xml -特定于项目等的可重用bash概要文件

    2。通用模块 这将有[api、核心和内容子模块]。顾名思义,它应该具有不属于任何模块或可以跨所有模块使用的通用服务或实用程序类。要格外小心,并证明在这个模块中添加类的原因,否则一切都会在公共模块上结束

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


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

    • 组件:所有组件都在这里。进一步细分为[内容、全局、脚本]
    • 安装
    • 页面:页面组件
    • 模板:页面模板

    4。配置模块 该模块将承载OSGI、云配置以及基于/conf的实现。基于Conf的实现示例

    • OSGI配置模块:将所有配置打包为内容的模块
    • 云配置模块:将所有配置打包为内容的模块
    5。吊索错误处理模块 任何错误处理内容都应位于此处。示例配置具有作者模式显示错误堆栈,在发布模式下返回404响应

    6。设计模块 任何错误处理内容都应位于此处。示例配置具有作者模式显示错误堆栈,在发布模式下返回404响应

    7。内容模块 包装样本内容和/或测试内容。在一些实现中,我们选择将测试内容保持为单独的模块

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

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

    • 咕噜声/咕噜声
    • 服务/操作(针对业务层)
    • 验证
    • 数据导入
    • 不相容试验
    • 容器测试内容
    除此之外,我们还创建了一个pom项目,该项目抽象了AEM项目特有的所有依赖项、配置、插件和概要文件,并将其用作pom项目的父项目。这清理了项目pom,并允许同一客户机的跨项目重用


    Sample
    parent.pom

    当然,一旦有时间,我会创建并共享一个结构示例。