2012-12-12 45 views
0

我正在运行一个OSGi应用程序,并且我有分别使用共享库S1和S2的软件包B1和B2。 S1和S2有很多导出的冗余方法。我希望这两个bundle只从其各自的共享库调用方法(所以B1使用S1和B2使用S2)。在osx中​​,这是行为。但在Linux上,行为是不同的。两个osgi bundle都使用来自首先加载的sharedlib的方法。我猜这是因为共享库是由相同的进程加载的。在同一进程中加载​​多个共享库

我该如何确保每个包只使用来自其各自共享库的方法?

+0

能否请您解释一下您是如何加载这些库? –

+0

System.loadLibrary();这些库包含在捆绑中。 – Abhijith

回答

1

您需要在MANIFEST.MF

申报一个版本的束插入S1清单文件

Bundle-Version: 1.0.0.S1 

而进入B1清单

Import-Package: yourpackage;version="1.0.0.S1" 

插入S2清单文件

Bundle-Version: 1.0.0.S2 

而进入B2清单

Import-Package: yourpackage;version="1.0.0.S2" 

这样将只使用一个包中的类S1

+0

我不会将此添加到版本。可以声明导出和导入的自定义属性,如下所示:'Import-Package:yourpackage;版本= “1.0.0”;库= S1'。但是,我不确定这是否适用于OP问题,因为我相信他正在讨论实际的共享库(不是捆绑包),如标签所示。 –