我正在尝试从3个依赖项中创建一个捆绑x
a.jar has spring-context.xml
b.jar has spring-cotext.xml
c.jar has spring-beans.xml
我的x包应该导入所有a,b,c jar资源,并在创建bundle时将它们合并到x.jar中的上下文xml中。这有可能吗?
我有一个maven项目a,b,c是maven jar模块。 x是一个捆绑项目,其依赖关系为a,b,c。
请有人帮忙吗?
答案 0 :(得分:0)
我确信这是可能的,但您可能必须编写实际代码来合并这些XML文件。将a,b和c组合成束x是可用工具可以为您做的事情。你可以看一下Bnd或其中一个使用Bnd的工具(Maven Bundle Plugin和其他工具)。
答案 1 :(得分:0)
你所建议的(结合多个包的弹簧上下文)违背了OSGi的基本原则。您不应该拥有依赖于其他bundle的上下文的bundle。
您应该使用OSGi服务来处理依赖项。因为您正在使用spring上下文文件,所以我假设您正在使用Spring-DM。您可以使用以下命令在Spring DM中注册服务(通常在单独的osgi-context.xml文件中完成,以确保代码库不依赖于OSGi进行测试。在此示例中,您将拥有一个bean在BContext.xml中定义的id诊所,它被引用为OSGi服务
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/osgi"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<service id="osgiClinic" ref="clinic" interface="org.springframework.petclinic.repository.Clinic" />
</beans:beans>
然后在使用bundle的osgi-context.xml中,您将引用该服务。在下面的示例中,您现在有一个名为clinic的bean,它使用第一个bean中的代码。
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/osgi"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<reference id="clinic" interface="org.springframework.petclinic.repository.Clinic"/>
</beans:beans>
这种做法将确保您考虑捆绑包之间的依赖关系,并仅导出其他捆绑包所必需的bean。