如何使用过滤器排除AEM包中的子节点

时间:2014-08-12 14:06:00

标签: cq5 aem

我正在创建一个AEM内容包,生成的zip包含必需的META-INF目录和filter.xml。

包的内容组织如下:

/jcr_root/apps/appgroup/myapp/components
/jcr_root/apps/appgroup/myapp/i18n/en_us.xml
/jcr_root/apps/appgroup/myapp/i18n/es_mx.xml
/jcr_root/apps/appgroup/myapp/templates

filter.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<workspaceFilter version="1.0">
    <filter root="/apps/appgroup/myapp">
        <exclude pattern="/apps/appgroup/myapp/i18n(/.*)?" />
    </filter>
</workspaceFilter>

尽管有排除模式,但在安装软件包时,i18n节点仍会部署到CRX中。过滤器不应该排除i18n节点吗?

最终,我想只部署en_us节点并让过滤器阻止任何其他语言。

我的理解是在安装期间而不是在编译期间考虑了过滤器。这是对的吗?

1 个答案:

答案 0 :(得分:1)

在构建软件包而不是安装软件包时应用过滤器。如果排除它,它不应该被您的软件包安装,但它也意味着如果已经存在,它也不会被删除!它应该表现得好像包没有触及排除过滤器覆盖的区域。

From the documentation

  • 要包含我的应用程序的所有脚本,但包含表单组件:
    • 根路径: /apps/myapp
    • 规则:排除:/apps/myapp/components/form(/.*)?
  

表单组件不包含在包中。如果是这样的组件   安装包时已经存在,CRX不会删除它,   因为它没有被过滤器定义。

     

...

     

构建包时,包含每个过滤器定义的所有内容。提取包时,将删除或替换与筛选器匹配的所有现有内容。


编辑:在Maven软件包中工作,您可以使用resource声明使用指定元素排除,以避免将内容添加到Zip中,例如:

<build>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>jcr_root/apps/appgroup/myapp/i18n</exclude>
                <exclude>jcr_root/apps/appgroup/myapp/i18n/**/*.*</exclude>
            </excludes> 
        </resource>
    </resources>
</build>

有可能filter.xml被Maven在构建和放大时忽略了一旦内容在包中,无论如何都由CQ安装。