AEM(在此之前,CQ)一直使用叠加原则来允许您扩展和自定义控制台和其他功能(例如,页面创作)。
叠加是可用于许多上下文的术语。 在此上下文中(扩展AEM),叠加意味着采用预定义的功能并将您自己的定义强加到上面(以自定义标准功能)。
在标准实例中,预定义的功能保留在/libs
下,建议在/apps
分支下定义叠加(自定义)。 AEM使用搜索路径来查找资源,首先搜索/apps
分支,然后搜索/libs
分支(可以配置搜索路径)。 此机制意味着您的叠加(以及在此处定义的自定义)将具有优先级。
自AEM 6.0起,对如何实施和使用叠加进行了更改:
从AEM 6.0开始——适用于Granite相关叠加(即触屏优化UI)
方法
在/apps
下重建相应的/libs
结构。
这不需要1:1副本,Sling Resource Mergare用于交叉引用所需的原始定义。 Sling Resource Merager通过差异(差异)机制提供访问和合并资源的服务。
在/apps
下进行任何更改。
优势
/libs
下的更改更可靠。AEM 6.0之前的非花岗岩叠加和叠加
方法
将内容从/libs
复制到/apps
您需要复制整个子分支,包括属性。
在/apps
下进行任何更改。
缺点
/libs
下发生更改时您所做的更改不会丢失,但您可能必须在/apps
下的叠加中重新创建发生的某些更改。对于许多更改,建议使用叠加方法,如配置控制台或在侧面板(在创作页面时使用)中为资产浏览器创建选择类别。 它们的要求是:
您不能在/libs
分支中进行更改
您所做的任何更改都可能会丢失,因为只要您:
他们将您所做的更改集中在一个位置;使您能根据需要更轻松地跟踪、迁移、备份和/或调试更改。
对于叠加,交付的资源是检索到的资源和属性的聚合,具体取决于可定义的搜索路径:
资源解析器搜索路径(在Apache Sling资源解析器工厂的OSGi配置中定义)。
/apps
、/libs
—— 因此,/apps
的内容的优先级高于/libs
(即叠加它)。两个服务用户需要对存储脚本的位置进行JCR:READ访问。 这些用户是:components-search-service(由com.day.cq.wcm.coreto访问/缓存组件使用)和sling-scripting(由org.apache.sling.servlets.resolver用于查找servlet)。
还必须根据您放置脚本的位置配置以下配置(在本例中,位于/etc、/libs或/apps下)。
PID = org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
resource.resolver.searchpath=["/etc","/apps","/libs"]
resource.resolver.vanitypath.whitelist=["/etc/","/apps/","/libs/","/content/"]
最后,还必须配置Servlet解析程序(在本例中,还要添加/etc)
PID = org.apache.sling.servlets.resolver.SlingServletResolver
servletresolver.paths=["/bin/","/libs/","/apps/","/etc/","/system/","/index.servlet","/login.servlet","/services/"]
下面介绍了一些示例: