我正在创建一个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
节点,并让过滤器屏蔽任何其他语言。
我的理解是,过滤器是在安装过程中考虑的,而不是在编译过程中考虑的。 这是正确的吗?
过滤器是在构建包时应用的,而不是在安装时应用的。有了排除项,它不应该被你的包安装,但这也意味着如果已经存在,它也不会被删除!它应该表现得像包一样,而不是像包一样被安装。它应该表现为,如果包没有触及排除过滤器所覆盖的区域。
从文档中*可以看出:
/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: * 最初的例子不再是 在 的文档,现在日网已经倒闭了,但应该还能坚持。更新的文档是 现在这里