【问题标题】:java.lang.ClassFormatError exception with library packaged as OSGi bundlejava.lang.ClassFormatError 异常,库打包为 OSGi 包
【发布时间】:2012-10-28 16:25:01
【问题描述】:

在将我的项目中需要的库打包为 OSGi 捆绑包时,我仍然在苦苦挣扎。 我已经问过了here。那里的答案肯定足够好,但我又遇到了另一个我不明白且无法分解的问题:(

我最终将库打包为 OSGi 包,我已经确定了所有需要的依赖项,所有这些现在都在一个完整的 jar 存档中。

现在,如果我尝试使用该库的某个函数,则会引发异常,因为:

Caused by: java.lang.ClassFormatError: javax/ws/rs/core/UriBuilder
    at com.atlassian.jira.rest.client.internal.jersey.JerseyJiraRestClient.<init>(JerseyJiraRestClient.java:61)
    at com.atlassian.jira.rest.client.internal.jersey.JerseyJiraRestClientFactory.create(JerseyJiraRestClientFactory.java:34)
    at com.atlassian.jira.rest.client.internal.jersey.JerseyJiraRestClientFactory.createWithBasicHttpAuthentication(JerseyJiraRestClientFactory.java:39)
    at com.tieto.etb.esb.libs.jiraclient.JiraClient.getClient(JiraClient.java:28)[145:jiraclient.bundle:0.1.0.SNAPSHOT]
    at com.tieto.etb.esb.jira.JiraBean.projectInfo(JiraBean.java:38)[142:jira.bundle:0.1.0.SNAPSHOT]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.6.0_35]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)[:1.6.0_35]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_35]
    at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_35]
    at org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:341)[70:org.apache.camel.camel-core:2.10.1]
    at org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:238)[70:org.apache.camel.camel-core:2.10.1]
    at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:166)[70:org.apache.camel.camel-core:2.10.1]
    ... 52 more

我想问你一个提示,那里可能有什么问题。我猜在构建捆绑包时出了点问题。

例如,我有另一个用于这个包的 pom,我在编译范围内都有。此捆绑包正在运行...

我将比较这两种情况的 MANIFEST 文件,可能仍然缺少一些依赖项。

【问题讨论】:

  • 我认为 uber jar 方法是最后的手段。我认为这从一开始就是一个错误。
  • 那么更好的方法是从库中创建真正的 OSGi 包?什么意思,OSGify 还有它所有的依赖,不是 OSGi 准备好的,对吧?

标签: osgi bundle


【解决方案1】:

好的,以某种方式解决了。在在这里寻求帮助之前,我应该更深入地搜索问题:) 因此,在 pom 文件中,我将 javaee-api 的依赖范围更改为“提供”。 (hint)

然后有一些关于“未解决的依赖”的抱怨,但那些被标记为“;resolution:="optional" :P

到目前为止它有效。但我想这远非“干净又好”的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2016-05-30
    • 2011-10-06
    • 1970-01-01
    • 2014-12-14
    • 2012-05-22
    相关资源
    最近更新 更多