Java Maven:在编译osgi包时未找到类

Java Maven:在编译osgi包时未找到类,java,maven,osgi,Java,Maven,Osgi,我有三个OSGI项目: ProjectA(提供了对ProjectB的依赖关系)有一个包含代码的类 ... ClassB b=new ClassB(); ProjectB(依赖于提供的ProjectC)具有以下类: public class ClassB extends AbstractClassC{ ... } public abstract class AbstractClassC{ } ProjectC具有以下类别: public class ClassB extends Abstra

我有三个OSGI项目:

ProjectA(提供了对ProjectB
的依赖关系)有一个包含代码的类

...
ClassB b=new ClassB();
ProjectB(依赖于提供的ProjectC
)具有以下类:

public class ClassB extends AbstractClassC{
...
}
public abstract class AbstractClassC{
}
ProjectC具有以下类别:

public class ClassB extends AbstractClassC{
...
}
public abstract class AbstractClassC{
}
ProjectB和ProjectC导出所有必要的包

为了:

  • 我编译ProjectC-ok
  • 我编译ProjectB-好的
  • 我编译ProjectA-找不到类C
  • 当我将ProjectA依赖项添加到ProjectC中时,一切都可以顺利编译。为什么会发生这种情况?据我所知,ProjectA的编译必须只依赖于ProjectB。我错了吗


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

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

    不过,您面临的主要问题是:

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

    为什么要为自己编写的类使用
    提供的
    ?只需使用
    编译
    ,它就能解决您的问题。或者,您可以将
    ProjectC
    依赖项添加到
    ProjectA

    谢谢您的时间。您将
    不可传递
    标记为非常重要。但我不明白这是什么意思。此外,对于运行时,我没有问题,因为它是osgi和我添加的所有必要的包。我一直这样做,从来没有遇到过问题。@JimJim2000你的第一语言是什么(人类,不是编程)?我的母语是俄语。我已经翻译了“可传递的”,但我不明白它在编译中是什么意思
    可传递的
    @JimJim2000 ProjectB取决于ProjectC。如果此依赖关系是可传递的,那么当您在ProjectA中声明对ProjectB的依赖关系时,它也会将ProjectC添加到您的类路径中。如果它不是可传递的,那么它不会将ProjectC添加到类路径中。另外,我建议使用本文中的代码,因为我知道如果我将范围设置为编译,那么ProjectA将包含ProjectB中的代码。我不想要它,因为它是osgi。