【发布时间】: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 准备好的,对吧?