Java 在同一进程中加载多个共享库

Java 在同一进程中加载多个共享库,java,gcc,linker,osgi,ld,Java,Gcc,Linker,Osgi,Ld,我正在运行一个OSGi应用程序,并且我有分别使用共享库S1和S2的捆绑包B1和B2。S1和S2有很多导出的冗余方法。我希望两个bundle只从各自的共享库调用方法(因此B1使用S1,B2使用S2)。但在linux上,行为是不同的。两个osgi捆绑包都使用来自首先加载的sharedlib的方法。我猜这是因为共享Lib是由同一个进程加载的 如何确保每个bundle只使用其各自共享库中的方法 您需要在Manifest.MF中声明捆绑包的版本 插入到S1清单文件中 Bundle-Version: 1.0

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


如何确保每个bundle只使用其各自共享库中的方法

您需要在Manifest.MF中声明捆绑包的版本

插入到S1清单文件中

Bundle-Version: 1.0.0.S1
Bundle-Version: 1.0.0.S2
进入B1舱单

Import-Package: yourpackage;version="1.0.0.S1"
插入到S2清单文件中

Bundle-Version: 1.0.0.S1
Bundle-Version: 1.0.0.S2
进入B2舱单

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

这样,我将只使用S1中的包和类

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