【问题标题】:JCR Node imported as nt:file when using content-package-maven-plugin使用 content-package-maven-plugin 时将 JCR 节点导入为 nt:file
【发布时间】:2015-01-15 18:04:57
【问题描述】:

我在 /apps/myproject/config/org.apache.sling.commons.log.LogManager.factory.config-MYPROJECT.xml 下的 Adob​​e CQ 项目中以 XML 格式创建了一个 OSGI 配置 JCR 节点

<?xml version="1.0" encoding="UTF-8"?>
<jcr:root
    xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
    xmlns:jcr="http://www.jcp.org/jcr/1.0"
    jcr:primaryType="sling:OsgiConfig"
    org.apache.sling.commons.log.level="Trace"
    org.apache.sling.commons.log.file="logs/myproject.log"
    org.apache.sling.commons.log.file.number="5"
    org.apache.sling.commons.log.file.size="5MB"
    org.apache.sling.commons.log.pattern="\{0,date,HH:mm:ss.SSS} *{4}* {3} {5}"
    org.apache.sling.commons.log.names="[com.mycompany.myproject]" />

问题是,当它被导入 JCR 时,它显示为 nt:file 而不是根据其 jcr:primaryType 应该显示的内容,因此它在 CRXDE 中看起来像这样

什么时候应该是这样的

【问题讨论】:

    标签: aem


    【解决方案1】:

    所以我的 XML 标记完全按如下方式开始:

    <?xml version="1.0" encoding="UTF-8"?>
    <jcr:root
        xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
        ...
    

    我最初所做的是创建一个新的 xml 文件并放入我的配置中。我知道还有 2 种其他方法可以创建节点

    1. 在 CRXDE 中完成,然后使用保管库导出
    2. 通过在 Eclipse 中使用 AEM 开发人员工具(Apache Sling 的 Eclipse 插件)进行操作

    在 Vault 导出的情况下,XML 开头如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" ...
    

    在插件的情况下,它是这样开始的

    <?xml version="1.0" encoding="UTF-8"?>
    <jcr:root 
        xmlns:sling="http://sling.apache.org/jcr/sling/1.0"
        ...
    

    但是等等,你在这里看不到它,插件实际上在jcr:root之后添加了一个该死的空格。

    因此,无论 XML 解析器对这些 XML 文件进行操作以在 JRC 中创建节点,如果根节点名称后面没有空格,它的行为就会很奇怪。我在 Windows 上,使用 Maven 3.2.3,使用 0.0.20 版的 content-package-maven-plugin 和 AEM 5.6.1。

    【讨论】:

      【解决方案2】:

      请检查您对 content-package-maven-plugin 的过滤器定义。如果您的过滤器根设置为

      <filter>
      <root>
      /apps/myproject/config/org.apache.sling.commons.log.LogManager.factory.config-MYPROJECT.xml
      </root>
      </filter> 
      

      而不是

      <filter>
      <root>
      /apps/myproject/config/org.apache.sling.commons.log.LogManager.factory.config-MYPROJECT
      </root>
      </filter> 
      

      那么它可能只是将文件放入您的存储库而不是创建配置节点。 后一种没有.xml文件扩展名是正确的。

      【讨论】:

      • 我认为你的意思是 因为 root 是一个元素的另一个是无效的。无论哪种方式都行不通。
      • 取决于您定义过滤器语句的位置。 的 maven 插件很好......如果你直接在配置部分中执行它。
      • 不,在 filter.xml 或插件配置中都没有。但我确实找到了解决方案。
      【解决方案3】:

      您需要将 jcr:mixinTypes="[]" 类型作为属性添加到您的记录器。所以你的配置会是这样的:

       <?xml version="1.0" encoding="UTF-8"?>
      <jcr:root xmlns:sling="http://sling.apache.org/jcr/sling/1.0" xmlns:jcr="http://www.jcp.org/jcr/1.0"
              jcr:mixinTypes="[]"
              jcr:primaryType="sling:OsgiConfig"
              org.apache.sling.commons.log.level="Trace"
              org.apache.sling.commons.log.file="logs/myproject.log"
              org.apache.sling.commons.log.file.number="5"
              org.apache.sling.commons.log.file.size="5MB"
              org.apache.sling.commons.log.pattern="\{0,date,HH:mm:ss.SSS} *{4}* {3} {5}"
              org.apache.sling.commons.log.names="[com.mycompany.myproject]" />
      

      希望这会有所帮助。

      【讨论】:

      • 没有没有用。你是从哪里得到这个想法的?你的 XML 标记确实让我看到了一些原来是解决方案的东西。
      猜你喜欢
      • 2013-07-23
      • 2014-09-07
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2012-07-16
      • 2020-09-21
      相关资源
      最近更新 更多