Maven:class 未找到编译 osgi 包

Maven: class not found compiling osgi bundle

我有三个 OSGI 项目:

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

...
ClassB b=new ClassB();

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

public class ClassB extends AbstractClassC{
...
}

ProjectC 具有以下 class:

public abstract class AbstractClassC{
}

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

依次为:

  1. 我编译 ProjectC - 可以。
  2. 我编译 ProjectB - 好的。
  3. 我编译 ProjectA - 抛出 AbstractClassC 未找到。

当我将 ProjectA 依赖项添加到 ProjectC 时,一切都可以毫无问题地编译。为什么会这样?据我了解,ProjectA 必须仅在对 ProjectB 有一个依赖项的情况下进行编译。我错了吗?

我检查了好几次 AbstractClassC 没有在 ProjectA 中使用,也没有导入。

首先,除非您知道如何使用 AbstractClassC,否则您不能创建 ClassB 的实例,这样代码在没有引用的情况下将无法编译。

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

  • provided - This is much like compile, but indicates you expect the JDK or a container to provide the dependency at runtime. For example, when building a web application for the Java Enterprise Edition, you would set the dependency on the Servlet API and related Java EE APIs to scope provided because the web container provides those classes. This scope is only available on the compilation and test classpath, and is not transitive.

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