是否需要将传递依赖项作为捆绑包导入 KURA
Is it required to import transitive dependencies as bundles to KURA
我对 OSGI 和 KURA 还很陌生。从昨天开始我就在处理一个问题,但我不明白它的原因。
如果我的方法不对,请告诉我。
我在我的项目中使用 dropbox-core-sdk
(版本 3.0.0)。我已经下载了它的 jar,而且我研究过它依赖于 jackson-core
(版本 2.7.4)。我还下载了它的 jar,并用 dropbox-core-sdk.jar
和 jackson-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.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)
我有两个相关的问题;
当我们从 public api 创建一个 bundle 时,这个 bundle 是否应该包含 public api 的传递依赖?
即使我为 Dropbox api 提供了它的传递依赖项,为什么程序会抛出这样的异常?
通常 NoClassDefFoundError
发生在捆绑加载一个 class 时,但捆绑中不存在,并且 class 的包没有 Import-Package
语句。
创建捆绑包时,请确保使用 bnd 自动创建具有适当 Import-Package
和 Export-Package
指令的清单。
我总是会使用构建从 jar 创建一个包。当我使用 maven 时,我会使用 maven 插件。 .
我对 OSGI 和 KURA 还很陌生。从昨天开始我就在处理一个问题,但我不明白它的原因。
如果我的方法不对,请告诉我。
我在我的项目中使用 dropbox-core-sdk
(版本 3.0.0)。我已经下载了它的 jar,而且我研究过它依赖于 jackson-core
(版本 2.7.4)。我还下载了它的 jar,并用 dropbox-core-sdk.jar
和 jackson-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.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)
我有两个相关的问题;
当我们从 public api 创建一个 bundle 时,这个 bundle 是否应该包含 public api 的传递依赖?
即使我为 Dropbox api 提供了它的传递依赖项,为什么程序会抛出这样的异常?
通常 NoClassDefFoundError
发生在捆绑加载一个 class 时,但捆绑中不存在,并且 class 的包没有 Import-Package
语句。
创建捆绑包时,请确保使用 bnd 自动创建具有适当 Import-Package
和 Export-Package
指令的清单。
我总是会使用构建从 jar 创建一个包。当我使用 maven 时,我会使用 maven 插件。