Multithreading 在OSGi捆绑包中创建的线程无法从其他捆绑包加载类

Multithreading 在OSGi捆绑包中创建的线程无法从其他捆绑包加载类,multithreading,osgi,karaf,Multithreading,Osgi,Karaf,我有几个OSGi包;在一个包中旋转一个线程,在run方法中,我试图从另一个包中创建一个类的实例,但它失败了,抛出ClassNotFoundException 捆绑包1: package com.test.bnd1; public Class A { } pom.xml: Export-package: com.test.bnd1.* Import-package: com.test.bnd1.* 捆绑包2: public com.test.bnd2; public Class B {

我有几个OSGi包;在一个包中旋转一个线程,在run方法中,我试图从另一个包中创建一个类的实例,但它失败了,抛出ClassNotFoundException

捆绑包1:

package com.test.bnd1;
 public Class A {
 }
pom.xml:

Export-package: com.test.bnd1.*
Import-package: com.test.bnd1.*
捆绑包2:

public com.test.bnd2;
public Class B {
   public void init() {
     MyThd thd = new MyThd();
     thd.start();
   }
}

public Class MyThd extends Thread {
   public void run() {
      A a = new A(); //throws ClassNotFoundException
   }
}
pom.xml:

Export-package: com.test.bnd1.*
Import-package: com.test.bnd1.*
blueprint.xml:

<bean id="testB" class="com.test.bnd2.B" init-method="init"/>


有人能帮忙吗?

读完本文后,我将当前线程的TCCL重置为bundle类装入器,并从其他bundle中装入了类。如果其他人有更好的解决方案,请告诉我。

OSGi中没有名为
exports package
imports package
的标题


您需要分别使用
Export-Package
Import-Package

您不应该这样做。我找不到任何其他方法!对不起,我会再说一遍。。。你不应该这么做。你确定你已经发布了你的实际代码,而不是一些过于简单化的代码吗?这当然不是实际的代码,但肯定它描述了问题。设置线程上下文类加载器修复了这个问题;这告诉我,即使有另一种方法可以修复,它也必须围绕类装入器。。。您实际发布的代码是否抛出ClassNotFoundException?