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

如何使用过滤器排除AEM包中的子节点,aem,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如下所示: &l

我正在创建一个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
节点,并让过滤器阻止任何其他语言


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

在生成包而不是安装包时应用过滤器。在排除的情况下,它不应该由您的软件包安装,但这也意味着如果已经存在,它也不会被删除!它的行为应该像包不接触排除过滤器覆盖的区域一样

来自文档*

  • 要包含除表单组件之外的所有应用程序脚本,请执行以下操作:
    • 根路径:
      /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>

src/main/resources
jcr_root/apps/appgroup/myapp/i18n
jcr_root/apps/appgroup/myapp/i18n/****
Maven在构建时可能会忽略
filter.xml
&一旦内容在包中,CQ就会安装它



EDIT2:*Day.com关闭后,文档中不再包含初始示例,但应仍然适用。更新的文档是

在生成包而不是安装包时应用过滤器。在排除的情况下,它不应该由您的软件包安装,但这也意味着如果已经存在,它也不会被删除!它的行为应该像包不接触排除过滤器覆盖的区域一样

来自文档*

  • 要包含除表单组件之外的所有应用程序脚本,请执行以下操作:
    • 根路径:
      /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>

src/main/resources
jcr_root/apps/appgroup/myapp/i18n
jcr_root/apps/appgroup/myapp/i18n/****
Maven在构建时可能会忽略
filter.xml
&一旦内容在包中,CQ就会安装它



EDIT2:*Day.com关闭后,文档中不再包含初始示例,但应仍然适用。更新的文档是

在生成包而不是安装包时应用过滤器。在排除的情况下,它不应该由您的软件包安装,但这也意味着如果已经存在,它也不会被删除!它的行为应该像包不接触排除过滤器覆盖的区域一样

来自文档*

  • 要包含除表单组件之外的所有应用程序脚本,请执行以下操作:
    • 根路径:
      /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>

src/main/resources
jcr_root/apps/appgroup/myapp/i18n
jcr_root/apps/appgroup/myapp/i18n/****
Maven在构建时可能会忽略
filter.xml
&一旦内容在包中,CQ就会安装它



EDIT2:*Day.com关闭后,文档中不再包含初始示例,但应仍然适用。更新的文档是

在生成包而不是安装包时应用过滤器。排除在外,它不应该这样做