我正在创建一个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
节点并让过滤器阻止任何其他语言。
我的理解是在安装期间而不是在编译期间考虑了过滤器。这是对的吗?
答案 0 :(得分:1)
在构建软件包而不是安装软件包时应用过滤器。如果排除它,它不应该被您的软件包安装,但它也意味着如果已经存在,它也不会被删除!它应该表现得好像包没有触及排除过滤器覆盖的区域。
/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安装。