Java Maven:在编译osgi包时未找到类
我有三个OSGI项目: ProjectA(提供了对ProjectBJava 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
的依赖关系)有一个包含代码的类
...
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。