我一直在互联网上寻找有关配置Sling 资源解析器映射的更多信息。根据我在网上找到的内容和我的经验,目前有两种方法可以在AEM中完成此操作。
- 通过org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImplOSGi propertyresource.resolver.mapping
- 通过org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImplOSGI 属性资源.resolver.map.location 指定的资源
关于资源解析映射的Sling文档和关于资源映射的AEM文档似乎都建议使用使用属性resource.resolver.map.location的方法(2(,因为它是文档解释的唯一方法。
我很想澄清这一点,并更好地了解这个话题。我认为关于这个主题的大多数在线资源在解释这两种方法的差异以及使用一种方法与另一种方法的好处方面缺乏深度。非常欢迎有关此主题的更详细的见解,解释和实用插图。
谢谢
我也无法给出答案。但是,如果您查看MapEntries#doUpdateConfiguration
(第 428 行(的代码,则可以看到以下条目最终合并到同一个内部查找映射中。所以从技术上讲没有区别。
resource.resolver.virtual
resource.resolver.mapping
resource.resolver.map.location
请参阅以下代码: https://github.com/apache/sling-org-apache-sling-resourceresolver/blob/master/src/main/java/org/apache/sling/resourceresolver/impl/mapping/MapEntries.java
我的理解
据我了解,至少从CQ 5天开始,推荐的方法是使用resource.resolver.map.location
。这是最灵活的方式。由于历史原因,其他人可能仍然存在。
大型多品牌/多团队项目
/etc/map
的另一个很好的理由是,具有多个团队和品牌的大型项目必须避免全局OSGi配置(考虑到联合利华之类的东西(。因此,许多其他OSGi配置也有另一种配置方法:
- 通过配置工厂(Sling服务用户映射器/Sling服务用户映射器修正(
- 通过每个服务的配置(Sling.auth.requirements in the Sling Authentication Service(
- 或通过全局内容结构(您的示例/etc/maps(
在这种情况下,总是更喜欢变体,它允许多个团队独立提供他们的配置部分。在您的情况下,团队可以在/etc/map
下提供不同的子树
PS:我什至不确定正则表达式是否在 OSGi 配置中工作。这也说明了/etc/maps
。