Jackrabbit Oak中单个根下子节点多过滤模式配置可行性咨询
AEM云项目中FileVault过滤规则配置问题
JCR结构
+ conf + folder1 + folder2 - node-1 - node-2 - immutable-node-1 - immutable-node-2
需求
给/conf下所有节点设置mode="merge_properties"过滤模式,但folder2下以immutable开头的节点例外,这类节点要使用replace模式。
尝试的配置及问题
我试了下面的配置:
<filter root="/conf" mode="merge_properties"> <exclude pattern="/conf/folder2/immutable-(/.*)?"/> </filter> <filter root="/conf/folder2"> <include pattern="/conf/folder2/immutable-.*"/> </filter>
实际运行时发现,就算第一个规则加了exclude,只要其他规则的root覆盖了该路径,系统只会遵循第一个规则,达不到预期效果。
环境信息
项目是最新版的AEM云项目,pom里的FileVault插件配置如下:
<plugin> <groupId>org.apache.jackrabbit</groupId> <artifactId>filevault-package-maven-plugin</artifactId> <extensions>true</extensions> <version>1.3.6</version> ... </plugin>
可行解决方案
这个需求完全可以实现,问题出在规则顺序和模式设置上。FileVault的过滤规则是按定义顺序匹配的,更具体的规则必须放在前面,这样才不会被全局规则覆盖。
正确的配置写法:
<!-- 先处理immutable开头的节点,设置replace模式 --> <filter root="/conf/folder2" mode="replace"> <include pattern="/conf/folder2/immutable-.*"/> </filter> <!-- 再处理/conf下其余节点,设置merge_properties模式,排除已处理的immutable节点 --> <filter root="/conf" mode="merge_properties"> <exclude pattern="/conf/folder2/immutable-(/.*)?"/> </filter>
原理说明
- 规则顺序优先:先定义的规则会被先匹配,所以把
immutable节点的规则放在前面,让这些节点优先命中replace模式。 - 全局规则排除已匹配节点:第二个规则覆盖
/conf下所有节点,但通过exclude跳过已经被第一个规则处理的immutable节点,给剩下的节点应用merge_properties模式。
验证要点
- 安装包后修改
immutable-node-1的属性,重新安装包,确认原有属性被完全替换。 - 修改
node-1或folder1下节点的属性,重新安装包,确认属性是合并更新而非覆盖。
内容的提问来源于stack exchange,提问作者Connor Low
相关产品推荐
相关产品推荐

