1

我对 OSGI 和 KURA 很陌生。我从昨天开始就在处理一个问题,但我不明白它的原因。

请告诉我我的方法是否错误。

dropbox-core-sdk在我的项目中使用(版本 3.0.0)。我已经下载了它的 jar,并且我研究过它依赖于jackson-core(版本 2.7.4)。我还下载了它的 jar 并创建了一个包含dropbox-core-sdk.jarjackson-core.jar.

首先,我导入了依赖项(与 dropbox 和 jackson 捆绑在一起),然后导入了我自己的项目。

当我开始我的项目时,它会引发以下异常;

java.lang.NoClassDefFoundError: javax/net/ssl/HttpsURLConnection
    at com.dropbox.core.http.StandardHttpRequestor.prepRequest(StandardHttpRequestor.java:196)
    at com.dropbox.core.http.StandardHttpRequestor.startPost(StandardHttpRequestor.java:70)
    at com.dropbox.core.http.StandardHttpRequestor.startPost(StandardHttpRequestor.java:28)
    at com.dropbox.core.DbxRequestUtil.startPostRaw(DbxRequestUtil.java:232)
    at com.dropbox.core.v2.DbxRawClientV2$1.execute(DbxRawClientV2.java:100)
    at com.dropbox.core.v2.DbxRawClientV2.executeRetriable(DbxRawClientV2.java:256)
    at com.dropbox.core.v2.DbxRawClientV2.rpcStyle(DbxRawClientV2.java:97)
    at com.dropbox.core.v2.users.DbxUserUsersRequests.getCurrentAccount(DbxUserUsersRequests.java:120)
    at org.eclipse.kura.example.hello_osgi.DropBoxTransfer.<init>(DropBoxTransfer.java:37)
    at org.eclipse.kura.example.hello_osgi.DropBoxUpdateJob.execute(DropBoxUpdateJob.java:20)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

我有两个相关的问题;

  1. 当我们从公共 api 创建一个 bundle 时,这个 bundle 是否应该包含公共 api 的传递依赖?

  2. 即使我为 Dropbox api 提供了它的传递依赖项,为什么还要让程序抛出这样的异常呢?

4

1 回答 1

1

通常NoClassDefFoundError发生在捆绑包加载捆绑包中不存在的类并且没有Import-Package针对该类的包的声明时。

创建捆绑包时,请确保使用 bnd 自动创建带有合适说明的Import-Package清单Export-Package

我总是使用构建从 jar 中创建一个包。当我使用 maven 时,我会使用 maven 插件。有关创建捆绑包的一些可能方法,请参阅此问题

于 2017-03-27T13:27:45.007 回答