我知道OSGi可以用来管理服务依赖关系,也就是在bundle之间共享POJO实例。但是假设我有一个库B.jar
,它的编译时依赖于我的另一个库A.jar
中的类:
ProjectA/src/com/example/awesome/A.java
:
package com.example.awesome;
public class A {}
ProjectB/src/com/example/awesome/web/B.java
:
package com.example.awesome.web;
import com.example.awesome;
public class B extends A {}
OSGi是否有一个内置的声明式方法来在运行时强制执行此依赖? 是的,使用Export-Package
和Import-Package
清单头。
如果您使用自动构建系统,它可能会检测到这些关系并为您添加这些头。Maven和Gradle都使用bind来生成必要的manifest头文件。bind集成分别由maven-bundle-plugin和Gradle OSGi插件提供。