Compilation 如何编译osgi中的两个依赖包

Compilation 如何编译osgi中的两个依赖包,compilation,dependencies,osgi,bundles,Compilation,Dependencies,Osgi,Bundles,我正在学习OSGi框架。我发现捆绑包由.class文件和清单文件组成。现在假设我有两个bundle A和B,bundle B依赖于bundle A的服务。因此,在编译bundle B时,我必须将bundle A的服务类保留在bundle B的类路径中,或者将其(bundle A的服务)保留在bundle B中,以便编译器可以编译。现在如果我们这样做,那么模块化是如何实现的,两个包是如何独立的。请帮忙。 谢谢手动执行依赖关系管理很容易出错。我建议您使用maven来管理依赖关系。此外,maven b

我正在学习OSGi框架。我发现捆绑包由.class文件和清单文件组成。现在假设我有两个bundle A和B,bundle B依赖于bundle A的服务。因此,在编译bundle B时,我必须将bundle A的服务类保留在bundle B的类路径中,或者将其(bundle A的服务)保留在bundle B中,以便编译器可以编译。现在如果我们这样做,那么模块化是如何实现的,两个包是如何独立的。请帮忙。
谢谢

手动执行依赖关系管理很容易出错。我建议您使用maven来管理依赖关系。此外,maven bundle pluginIn可以帮助您在编译时检查导入/导出包;maven eclipse插件帮助您根据pom中的依赖项配置生成eclipse项目。

手动执行依赖项管理容易出错。我建议您使用maven来管理依赖关系。此外,maven bundle pluginIn可以帮助您在编译时检查导入/导出包;maven eclipse插件帮助您根据pom中的依赖项配置生成eclipse项目。

使用接口

您在界面
I
中有。类
A
实现
I
,因此在编译时和运行时都依赖于它。类
B
使用作为OSGi服务获得的
I
的实例。因此
B
在编译时和运行时取决于
I

因此,
A
B
都没有直接的相互了解。实现代码是隐藏的,只有接口是可见和共享的。这就是模块化的实现方式。

使用接口

您在界面
I
中有。类
A
实现
I
,因此在编译时和运行时都依赖于它。类
B
使用作为OSGi服务获得的
I
的实例。因此
B
在编译时和运行时取决于
I


因此,
A
B
都没有直接的相互了解。实现代码是隐藏的,只有接口是可见和共享的。这就是模块化的实现方式。

感谢您的回复。但是我想知道我是否必须把接口i保存在我的包B中,这样它才能被编译,然后我们得到jar。建议把接口保存在一个单独的包中,你可以在编译它们时把它放在a和B的类路径上。@BjörnPollex你的意思是当开发模块时,服务接口和实现应该放在单独的包中吗?因此,一般来说,每个模块至少由2个捆绑包组成,一个用于API,另一个用于不同的实现?@BjörnPollex为什么应该在捆绑包级别而不是包级别进行分离?我是OSGi新手,但我知道依赖关系也是在包级别处理的(即导入包)。@Mickelmarrache:将API放在单独的包中可以更容易地部署多个/不同的实现。依赖项是在包级别处理的,而部署是在包级别处理的,这一策略使您在包级别更加灵活。感谢您的回复。但是我想知道我是否必须把接口i保存在我的包B中,这样它才能被编译,然后我们得到jar。建议把接口保存在一个单独的包中,你可以在编译它们时把它放在a和B的类路径上。@BjörnPollex你的意思是当开发模块时,服务接口和实现应该放在单独的包中吗?因此,一般来说,每个模块至少由2个捆绑包组成,一个用于API,另一个用于不同的实现?@BjörnPollex为什么应该在捆绑包级别而不是包级别进行分离?我是OSGi新手,但我知道依赖关系也是在包级别处理的(即导入包)。@Mickelmarrache:将API放在单独的包中可以更容易地部署多个/不同的实现。依赖项在包级别处理,而部署在捆绑包级别处理,这一策略使您在捆绑包级别更灵活。