【发布时间】:2014-03-07 19:59:42
【问题描述】:
我正在尝试在 CQ5.5 中创建自定义 WCMCommand。我有 JDK1.7 并且遇到了可怕的 VerifyError。
ERROR [OsgiInstallerImpl] pack.age.name [pack.age.name] 实现对象实例化期间出错(java.lang.VerifyError: Expecting a stackmap frame at branch target 13 in method package.age.name.unbindRepo(Lorg/apache/sling/jcr/api/SlingRepository;)V at offset 5) java.lang.VerifyError: Expecting a stackmap frame at branch target 13 in method pack.age.name.unbindRepo( Lorg/apache/sling/jcr/api/SlingRepository;)V 在偏移量 5
据我所知,unbindRepo 方法超出了我的控制范围,因此我对此无能为力。我看到的两个修复是降级到 JDK1.6(我想避免)和添加“XX:-UseSplitVerifier 到启动参数”。我已经看到各种消息来源说要将其添加到 JVM 启动命令中。这些资源中只有少数真正涉及任何细节,而且没有一个提供足够的细节或直接在 CQ 环境中进行参考。
那么,如何将其作为启动参数直接添加到 CQ 之外的 JVM 中,或者如何将其添加到 CQ 中的 Build Bundle Process 中?我希望如果我可以构建带有触发此标志的捆绑包,那么捆绑包将能够正确构建。
据我所知,大多数 JVM 命令都是从命令行使用的,而在 CQ 中构建包时似乎没有等效的过程。
我是否需要使用 eclipse 来添加命令行参数,或者是否可以使用 CRXDE /Lite 来完成?
一些澄清:当我去构建捆绑包时,它构建得非常好。控制台中没有错误,它在捆绑列表中显示为活动的,并且组件也显示为活动的。我不完全知道在“构建捆绑包”生命周期中何时发生错误,但根据 CQ,它非常好,但由于某种原因它不能使用它。
编辑:我“技术上”解决了这个问题。正如您在上面看到的那样,函数“unbindRepo”正在引发错误。所以尽管不知道它应该做什么,但我添加了
public void unbindRepo(SlingRepository repo)
{
// doNothing();
}
它停止抛出错误,现在一切都可以继续了。我不推荐它作为解决方案,但它至少让我现在继续前进,这正是我想要的。由于我的问题是以 Tomek 确实回答了我的实际问题的方式措辞的,因此接受他的答案仍然是合适的。
【问题讨论】:
-
澄清一下,您正在创建一个 OSGi 捆绑包并且该捆绑包抛出此错误对吗?这不是现有代码库中出现的标准错误。
-
正确,我认为。我实际上是“技术上”自己修复的。我从字面上删除了一个“unbindRepo”函数,它停止了抱怨。公共无效 unbindRepo(){doNothing();}。它至少让我继续前进。在我了解得更清楚之前,我不确定这是一个“好的解决方案”。