我有三个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导出所有必需的包。
按顺序:
当我将ProjectA依赖项添加到ProjectC时,一切都编译没有问题。为什么会这样?据我所知,ProjectA必须只使用一个依赖项目编译。我错了吗?
我已多次检查过AbstractClassC未在ProjectA中使用而未导入。
答案 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
。