是否需要将传递依赖项作为包导入KURA

时间:2017-03-27 13:04:52

标签: java osgi kura

我是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是否应该包含public api的传递依赖?

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

1 个答案:

答案 0 :(得分:1)

当一个bundle加载一个bundle中不存在的类而且该类的包没有NoClassDefFoundError语句时,通常会发生Import-Package

创建包时,请确保使用bnd通过合适的Import-PackageExport-Package指令自动创建清单。

我总是使用构建从jar创建一个包。当我使用maven时,我会使用maven插件。 See this question for some possible ways to create bundles