Java 在不同的插件中分离DLL和本机调用

Java 在不同的插件中分离DLL和本机调用,java,eclipse,plugins,native,classloader,Java,Eclipse,Plugins,Native,Classloader,我想从关联的本机JNI类中分离一些DLL 插件: 在插件A中,DLL被放置并 加载插件时加载 在 插件B(依赖于A)JNI 放置的类包括 本机方法调用中的DLL 在运行时,由于找不到JNI类,我得到一个不满意的链接错误。 我尝试通过更新清单文件来更新类加载器逻辑: 插件A: Eclipse-BuddyPolicy: registered 插件B: Eclipse-RegisterBuddy: A 但这也不起作用。 你知道解决办法吗 编辑: 清单A: Manifest-Version: 1

我想从关联的本机JNI类中分离一些DLL

插件:

  • 在插件A中,DLL被放置并 加载插件时加载
  • 在 插件B(依赖于A)JNI 放置的类包括 本机方法调用中的DLL
在运行时,由于找不到JNI类,我得到一个不满意的链接错误。 我尝试通过更新清单文件来更新类加载器逻辑:

插件A:

Eclipse-BuddyPolicy: registered
插件B:

Eclipse-RegisterBuddy: A
但这也不起作用。 你知道解决办法吗

编辑:

清单A:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: xxx ;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: xxx.Plugin
Bundle-Vendor: xxx
Bundle-Localization: plugin
Bundle-NativeCode: native/dll/x1.dll;
 native/dll/x2.dll;
 native/dll/x3.dll;
 native/dll/x4.dll;
 native/dll/x5.dll;
 native/dll/x76.dll;
 native/dll/x.dll;
 native/dll/x7.dll;osname = win32; processor = x86
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.apache.commons.logging
Bundle-ClassPath: .
Eclipse-AutoStart: true
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy
Eclipse-BuddyPolicy: registered
Export-Package: xxx
舱单B:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %plugin.name
Bundle-SymbolicName: xxx;singleton:=true
Bundle-Version: 2.1.16
Bundle-Vendor: xxx
Bundle-Localization: plugin
Require-Bundle: org.eclipse.core.runtime,
 org.eclipse.ui,
 org.apache.commons.lang,
 org.apache.commons.logging,
 A
Export-Package: xxx
Bundle-ClassPath: .
Bundle-Activator: xxx
Eclipse-RegisterBuddy: A
Eclipse-AutoStart: true
Eclipse-LazyStart: true
Bundle-ActivationPolicy: lazy

我的直接建议是将插件B变成插件a的一个片段,而不是一个单独的插件,这样可以消除这些问题

这就是说,我认为你已经改变了你的清单;尝试执行JNI调用的插件B应该有
EclipseBuddyPolicy:registered
,插件A应该依赖于插件B并向其注册


也就是说,在阅读之后,我不确定buddyloading策略是否适用于非Java类文件。

我的直接建议是将插件B转换为插件a的片段,而不是单独的插件,这将消除这些问题

这就是说,我认为你已经改变了你的清单;尝试执行JNI调用的插件B应该有
EclipseBuddyPolicy:registered
,插件A应该依赖于插件B并向其注册


也就是说,阅读之后,我不确定buddyloading策略是否适用于非Java类文件。

我将尝试将DLL放在一个片段中,然后重试。谢谢,碎片在工作。结果是我不得不重新构造我的项目特性,但这应该是最微小的问题。我将尝试将DLL放在一个片段中,然后再试一次。谢谢,碎片在工作。结果是我不得不重新构造我的项目特性,但这应该是最微小的问题。