我正在运行一个OSGi应用程序,并且我有分别使用共享库S1和S2的软件包B1和B2。 S1和S2有很多导出的冗余方法。我希望这两个bundle只从其各自的共享库调用方法(所以B1使用S1和B2使用S2)。在osx中,这是行为。但在Linux上,行为是不同的。两个osgi bundle都使用来自首先加载的sharedlib的方法。我猜这是因为共享库是由相同的进程加载的。在同一进程中加载多个共享库
我该如何确保每个包只使用来自其各自共享库的方法?
我正在运行一个OSGi应用程序,并且我有分别使用共享库S1和S2的软件包B1和B2。 S1和S2有很多导出的冗余方法。我希望这两个bundle只从其各自的共享库调用方法(所以B1使用S1和B2使用S2)。在osx中,这是行为。但在Linux上,行为是不同的。两个osgi bundle都使用来自首先加载的sharedlib的方法。我猜这是因为共享库是由相同的进程加载的。在同一进程中加载多个共享库
我该如何确保每个包只使用来自其各自共享库的方法?
您需要在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
我不会将此添加到版本。可以声明导出和导入的自定义属性,如下所示:'Import-Package:yourpackage;版本= “1.0.0”;库= S1'。但是,我不确定这是否适用于OP问题,因为我相信他正在讨论实际的共享库(不是捆绑包),如标签所示。 –
能否请您解释一下您是如何加载这些库? –
System.loadLibrary();这些库包含在捆绑中。 – Abhijith