使用 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 下的 Adobe 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 文件并放入我的配置中。我知道还有其他两种创建节点的方法
- 在 CRXDE 中完成,然后使用 vault 导出
- 通过使用 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。
我在 /apps/myproject/config/org.apache.sling.commons.log.LogManager.factory.config-MYPROJECT.xml[=17 下的 Adobe 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 文件并放入我的配置中。我知道还有其他两种创建节点的方法
- 在 CRXDE 中完成,然后使用 vault 导出
- 通过使用 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。