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

问题描述 投票:0回答:1

我正在创建一个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节点?

最终,我想只部署在CRX中的 en_us 节点,并让过滤器屏蔽任何其他语言。

我的理解是,过滤器是在安装过程中考虑的,而不是在编译过程中考虑的。 这是正确的吗?

aem
1个回答
3
投票

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

从文档中*可以看出:

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

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

当构建软件包时,每个过滤器定义的所有内容都会被包含在内。当提取包时,所有与过滤器匹配的现有内容都会被删除或替换。


编辑。 在Maven捆绑包中,你可以使用 "指定元素 "来排除掉 资源 声明,以避免内容被添加到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安装。


EDIT2: * 最初的例子不再是 的文档,现在日网已经倒闭了,但应该还能坚持。更新的文档是 现在这里

© www.soinside.com 2019 - 2024. All rights reserved.