使用 content-package-maven-plugin 时导入为 nt:file 的 JCR 节点

JCR Node imported as nt:file when using content-package-maven-plugin

我在 /apps/myproject/config/org.apache.sling.commons.log.LogManager.factory.config-MYPROJECT.xml[=17 下的 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

什么时候应该看起来像这样

请检查您对 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 文件扩展名的是正确的。

您需要将 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 标记完全如下所示:

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

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

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

在库导出的情况下,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 之后添加了一个该死的空白 space。

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