Maven:找不到编译osgi包的类

时间:2015-07-14 14:24:29

标签: java maven osgi

我有三个OSGI项目:

ProjectA(依赖于ProjectB <scope>provided</scope>)有一个代码为

的类
...
ClassB b=new ClassB();

ProjectB(依赖于ProjectC <scope>provided</scope>)具有以下类:

public class ClassB extends AbstractClassC{
...
}

ProjectC有以下类:

public abstract class AbstractClassC{
}

ProjectB和ProjectC导出所有必需的包。

按顺序:

  1. 我编译ProjectC - 确定。
  2. 我编译ProjectB - 确定。
  3. 我编译ProjectA - 抛出未找到的AbstractClassC。
  4. 当我将ProjectA依赖项添加到ProjectC时,一切都编译没有问题。为什么会这样?据我所知,ProjectA必须只使用一个依赖项目编译。我错了吗?

    我已多次检查过AbstractClassC未在ProjectA中使用而未导入。

1 个答案:

答案 0 :(得分:3)

首先,除非您知道如何处理ClassB,否则无法创建AbstractClassC的实例,因此如果没有引用,代码将无法编译。

但是,您遇到的主要问题是<scope>provided</scope> is not transitive

  
      
  • 提供 -   这很像compile,但表示您希望JDK或容器在运行时提供依赖性。例如,在为Java Enterprise Edition构建Web应用程序时,您可以将Servlet API和相关Java EE API的依赖关系设置为提供的范围,因为Web容器提供了这些类。此范围仅适用于编译和测试类路径,不可传递。
  •   

为什么要将provided用于自己编写的课程?只需使用compile,它就可以解决您的问题。或者,您可以将ProjectC依赖项添加到ProjectA