Osgi 在bnd文件中包含资源

Osgi 在bnd文件中包含资源,osgi,Osgi,我试图从3个依赖项创建一个bundle x a.jar has spring-context.xml b.jar has spring-cotext.xml c.jar has spring-beans.xml 我的x包应该导入所有a、b、c jar资源,并在创建包时将它们合并到x.jar中的上下文xml中。这可能吗 我有一个maven项目a,b,c是maven jar模块。x是一个捆绑项目,其依赖项为a、b、c 有人能帮忙吗?我相信这是可能的,但是您可能需要编写实际的代码来合并这些XML文件

我试图从3个依赖项创建一个bundle x

a.jar has spring-context.xml
b.jar has spring-cotext.xml
c.jar has spring-beans.xml
我的x包应该导入所有a、b、c jar资源,并在创建包时将它们合并到x.jar中的上下文xml中。这可能吗

我有一个maven项目a,b,c是maven jar模块。x是一个捆绑项目,其依赖项为a、b、c


有人能帮忙吗?

我相信这是可能的,但是您可能需要编写实际的代码来合并这些XML文件。将a、b和c组合成捆绑包x是可用工具可以为您做的事情。您可以查看Bnd或在Maven Bundle插件和其他插件的封面下使用Bnd的工具之一。

您所建议的将多个Bundle中的spring上下文组合起来的做法违反了OSGi的基本原则。您不应该拥有依赖于其他捆绑包上下文的捆绑包

您应该通过利用OSGi服务来处理依赖关系。因为您使用的是spring上下文文件,所以我假设您使用的是spring DM。您可以在SpringDM中注册一个服务,通常在单独的osgi-context.xml文件中注册,以确保代码库不依赖于osgi进行测试。在本例中,您将拥有一个在BContext.xml中定义的id为clinic的bean,该bean被引用为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>
然后在消费包的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